通过写一个函数来解决...
SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1';//取出某存储过程的行数
WHILE I<=N LOOP//循环检查
   SELECT TEXT  INTO STOR_TEXT FROM ALL_SOURCE WHERE OWNER='TEMP' AND NAME='P1' AND LINE= I;
if instr(stor_text,upper('p2')) >0 then//存在关系
......
END LOOP;
...

解决方案 »

  1.   

    select count(*) from user_source where name = 'sp1' and text like '%sp2%'if count(*) >= 1 , sp1依賴sp2
      

  2.   

    oracle存儲過程的代碼可以隱藏的,所以“存储过程的内容全部取出”遮條路未必行得通。
    其實,這樣做得意義很顯然,就是在oracle中我們修改某些存儲過程或試圖時,可能導致某些store procedure編成invalid,如果實現了該方法,就可以寫個程序,一次按相關性,將invalid得store procedure(按相關聯、依賴得順序)全部重新編譯一次,省掉了很多維護得工作得。