考虑以下代码:
CREATE OR REPLACE PACKAGE the_package AS
PROCEDURE procA ( pval1 IN VARCHAR2 );
PROCEDURE procA ( pval1 IN NUMBER );
END;
/
创建了一个具有重载程序的PLSQL包procA
。
现在我们创建调用这些的过程:
CREATE OR REPLACE testProc1 AS
l_val VARCHAR2 := 'Boncho';
BEGIN
the_package.procA( l_val );
END;
/
CREATE OR REPLACE testProc21 AS
l_val NUMBER := 88;
BEGIN
the_package.procA( l_val );
END;
/
我想要做的是能够识别哪些变体testProc1
并testProc2
进行调用。
我无法使用,DBA_DEPENDENCIES
因为它只是告诉我testProc1
和testProc2
依赖于包the_package
。
我无法使用DBA_PROCEDURES
,因为它只告诉我可以调用哪些程序。
似乎唯一的选择是以某种方式使用DBA_PROCEDURES
和的组合DBA_ARGUMENTS
并DBA_SOURCE
进行一些类似编译器的分析来获得所需的输出:
第 2 行的包的过程testProc1
调用。 第 3 行的包的过程调用。procA
the_package
testProc2
procA
the_package
但是谁想编写 PLSQL 编译器?
但是我认为 Oracle 在编译时会进行验证,即在编译过程时会检查所调用的过程是否存在。因此,我想也许在元数据的某个地方存储了有关所调用过程的确切信息。
是否有人知道在元数据视图中这些信息被保存在哪里?