我在oracle中有一个主程序,它调用了许多程序。这些内部过程还调用其中的函数和过程。这持续到很多层次。 例如:
Proc A
call c
call d
end............
proc c
call e
call f
end ....................
proc e
call j
call h
end
j调用一些内部调用另一个的过程,依此类推。这个循环继续下去。
我想查找执行main api时在运行时调用的所有过程的名称。是否可以使用toad找到所有这些?有没有这样做的工具?
答案 0 :(得分:1)
以下是递归旅行user_dependencies
:
select * from user_dependencies
start with name = 'MAIN_PROC'
connect by name = prior referenced_name
and type = prior referenced_type
and referenced_type in ('PROCEDURE', 'FUNCTION' );
查看演示:----> http://www.sqlfiddle.com/#!4/9ca2a/1
答案 1 :(得分:0)
您可以使用oracle中的dba_dependencies数据字典视图来检查主过程中正在使用的过程/函数的名称。但是,为了在运行时进行检查,您可能必须编写DBMS_OUTPUT.PUT_LINE语句,或者可以创建audit_log_table,您可以在其中插入过程/函数的名称。
答案 2 :(得分:0)
在Toad的Schema Browser中单击您正在执行的主程序,在右侧面板上,有一个名为 Deps(Used By)的选项卡。在此下,您将找到正在使用的所有对象。
或者,您可以执行以下操作,列出所有相关对象
SELECT *
FROM user_dependencies
WHERE name = '<your_procedure_name>' AND referenced_type='PROCEDURE'
答案 3 :(得分:0)
我使用Oracle AUDIT 来跟踪客户端应用程序使用哪些 functions / procedures / packages (从客户端调用它们)。您可以使用它指定特定的plsql语句名称,在您的情况下是您的主过程名称,并进一步跟踪它们。我认为这可能会有所帮助。
答案 4 :(得分:0)
对于提供所需内容的元数据,没有简单的查询。但是,您可以在某些方面进行自己的研究以找到所需的东西。
http://stevenfeuersteinonplsql.blogspot.com/2018/07/the-plscope-resource-center.html
https://sqldev.tech/clearsql8_subscription
http://www.oracle.com/partners/campaign/o25plsql-093886.html
祝你好运。凯文