我的问题是如何通过SQL查询或任何其他内部/外部工具查找内部oracle包依赖项 . 它是否可能,或者我应该通过代码并找出自己?
示例案例:
-
我有一个包含4个程序的包
A
,B
,C
,D
和1个函数F
. -
A
是'main'程序,它运行B
和C
程序 . -
函数
F
由B
和C
程序使用 . -
过程
D
是独立的(在elswhere使用) .
现在我想得到这样的结果:
STATUS PRC/FNC NAME PRC/FNC NAME USED INSIDE
------ ------------ ------------------------
MAIN A B, C
SLAVE B F
SLAVE C F
INDIVIDUAL D -
SLAVE F -
我发现've searched stack for an answer and the closest I'将是:How do you programatically identify a stored procedure's dependencies?但它只给我一个包之间的依赖关系,而不是依赖关系'inside'一个包 .
1 回答
您可以从包with PL/Scope中获取对程序的调用,从以下开始:
如果您随后重新编译包,请根据您的描述使用简单的大纲:
然后你可以在
user_identifiers
视图中看到各种引用 . 使用文档中的示例来获取大纲:为了得到更接近你想要的东西,你仍然需要一个分层查询来查找调用另一个的每个过程/函数的名称,因为你不感兴趣(例如)分配步骤,就在那些发生的地方 .
作为起点,您可以:
然后过滤叶节点并组合调用者:
但那并没有显示
F
;你可以添加一个外部联接来获得:我很确定可以简化......
获得主/从/独立标志有点棘手;你需要决定每一个意味着什么(例如,主要呼叫已经呼出,但没有呼叫进入;独立呼叫进出;其他所有其他呼叫)可能需要进一步加入以解决问题 .
因此,这是一个起点,可以为您提供一些信息,并希望以您需要的格式指出要探索的内容以获取所需的所有信息 .