คุณจะระบุการขึ้นต่อกันของกระบวนงานที่เก็บไว้โดยทางโปรแกรมได้อย่างไร

เป็นไปได้ไหมที่จะเขียนแบบสอบถาม PL/SQL เพื่อระบุรายการการขึ้นต่อกันของโพรซีเดอร์ที่เก็บไว้ทั้งหมด ฉันสนใจที่จะระบุขั้นตอนการจัดเก็บอื่น ๆ เท่านั้นและฉันไม่ต้องการจำกัดความลึกของการซ้อนที่ได้รับเช่นกัน ตัวอย่างเช่น ถ้า A เรียก B ซึ่งเรียก C ซึ่งเรียก D ฉันต้องการให้ B, C และ D รายงานว่าเป็นการขึ้นต่อกันของ A


person ninesided    schedule 18.11.2008    source แหล่งที่มา


คำตอบ (4)


ในหน้านี้ คุณจะพบข้อความค้นหาต่อไปนี้ซึ่งใช้ PUBLIC_DEPENDENCY ตารางพจนานุกรม:

 SELECT lvl
     , u.object_id
     , u.object_type
     , LPAD (' ', lvl) || object_name obj
   FROM ( SELECT LEVEL lvl, object_id
            FROM SYS.public_dependency s
         START WITH s.object_id =
                      ( SELECT object_id
                          FROM user_objects
                         WHERE object_name = UPPER ('&OBJECT_NAME')
                           AND object_type = UPPER ('&OBJECT_TYPE'))
         CONNECT BY s.object_id = PRIOR referenced_object_id
         GROUP BY LEVEL, object_id) tree
      , user_objects u
  WHERE tree.object_id = u.object_id
ORDER BY lvl
/
person Eddie Awad    schedule 18.11.2008

ฉันเห็นด้วยกับ EddieAwad

มีประโยชน์ที่จะชี้ให้เห็นว่า Oracle ติดตามการขึ้นต่อกันจนถึงระดับอ็อบเจ็กต์เท่านั้น หากคุณมีขั้นตอนการจัดเก็บของคุณในแพ็คเกจ คุณสามารถติดตามการขึ้นต่อกันเท่านั้นหากแพ็คเกจนั้น ไม่ใช่ฟังก์ชัน/ขั้นตอนแต่ละรายการภายในแพ็คเกจ

หากคุณต้องการติดตามการขึ้นต่อกันภายในแพ็คเกจ คุณจะต้องมีตัวแยกวิเคราะห์ PLSQL

person darreljnz    schedule 18.11.2008

สิ่งอื่นที่ควรชี้ให้เห็นที่นี่คือมีบางกรณีที่การขึ้นต่อกันอาจอยู่ที่รันไทม์เท่านั้น ซึ่งน่าเสียดายที่จะไม่แสดงในข้อมูลเมตา

ตัวอย่างเช่น หากคุณกำลังสร้างคำสั่ง SQL ขณะรันไทม์ คุณอาจมีโค้ดที่คล้ายกับ:

...
mysql := 'select count(*) from '||table_name_in;
execute immediate mysql;
...

ฉันรู้สึกแย่กับสิ่งนี้มาสองสามครั้งแล้ว แต่น่าเสียดายที่ไม่มีทางที่จะค้นหาการขึ้นต่อกันประเภทนี้ล่วงหน้าได้ เนื่องจากอาจขึ้นอยู่กับอินพุตของผู้ใช้

person Dwayne King    schedule 29.12.2008

หากต้องการดูรายละเอียดทั้งหมด:

select * from all_dependencies where owner = '&OWNER' and NAME='&OBJECT_NAME' 
person Kalpesh Nayak    schedule 13.04.2011