オブジェクト間の呼び出し階層については、all_dependenciesテーブルやDEPTREEなどで出力できたのですが、
パッケージの中にあるプロシージャ単位で、呼び出し階層を出力することは可能でしょうか?
複数のパッケージがあり、各々のパッケージの中に、複数プロシージャが定義されているPL/SQLソースに対し、
呼び出し関係を明らかにできればと思っています。
お知恵を頂ければ幸いです。
なお、オブジェクト間の呼び出し階層を出力するSQLは下記の通りです。
(一時テーブルに結果を格納後、テキスト出力しています)
set serveroutput on size 1000000
set echo off
set heading off
set newpage none
set trimspool on
set trimout on
set pagesize 0
set linesize 32767
set long 2000000000
set longchunksize 30000
set feedback off
set timing off
set verify off
DECLARE
MAX_DEPTH CONSTANT PLS_INTEGER := 7; -- ← ツリーの深さを設定
top_obj VARCHAR2(30) DEFAULT 'パッケージ名'; -- ← オブジェクトを設定
depth PLS_INTEGER DEFAULT 1;
no PLS_INTEGER DEFAULT 1;
PROCEDURE show_dep(curr_depth IN PLS_INTEGER, curr_obj IN VARCHAR2)
IS
CURSOR csr IS
SELECT DISTINCT referenced_name
FROM all_dependencies
WHERE NAME = curr_obj
AND referenced_name != curr_obj
AND referenced_name NOT IN ('STANDARD',
'DBMS_SYS_SQL',
'DBMS_SQL',
'SYS');
BEGIN
IF curr_depth <= MAX_DEPTH THEN
FOR rec IN csr LOOP
insert into test_proc_reference values (no, RPAD('>', curr_depth * 4, ' ') ||rec.referenced_name);
no := no + 1;
show_dep(curr_depth + 1, rec.referenced_name);
END LOOP;
END IF;
END;
BEGIN
show_dep(depth, UPPER(top_obj));
commit;
END;
/
spool X.txt
select REFERENCED_NAME from test_proc_reference order by no;
spool off
メッセージ編集者: 3350022
プロシージャの呼び出し階層を一覧出力するのは難しそうですね。