Considere o seguinte código:
CREATE OR REPLACE PACKAGE the_package AS
PROCEDURE procA ( pval1 IN VARCHAR2 );
PROCEDURE procA ( pval1 IN NUMBER );
END;
/
Eles criaram um pacote PLSQL que possui os procedimentos sobrecarregados procA
.
Agora criamos procedimentos que chamam estes:
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;
/
O que eu quero fazer é conseguir identificar quais variantes testProc1
e testProc2
chamar.
Não posso usar DBA_DEPENDENCIES
porque ele apenas me diz que testProc1
e testProc2
dependem do pacote the_package
.
Não posso usar DBA_PROCEDURES
porque ele só me diz quais procedimentos podem ser chamados.
Parece que a única opção é usar de alguma forma uma combinação de DBA_PROCEDURES
, DBA_ARGUMENTS
e DBA_SOURCE
e fazer alguma análise semelhante à de um compilador para obter a saída desejada de:
testProc1
Chamadas de procedimento procA
do pacote the_package
na linha 2. testProc2
Chamadas de procedimento procA
do pacote the_package
na linha 3.
Mas quem quer escrever um compilador PLSQL?
No entanto, acho que o Oracle faz a validação em tempo de compilação, ou seja, quando compila os procedimentos, ele verifica se os procedimentos que estão sendo chamados existem. Então, estou pensando que talvez haja informações de qual procedimento precisamente é chamado armazenado em algum lugar nos metadados.
Alguém sabe de algum lugar nas visualizações de metadados onde essas informações são mantidas?