vacía públicos procedimientos privados paquetes paquete miembros funciones ejemplos ejecutar developer definición crear como oracle package

oracle - públicos - Retreive una lista de procedimientos/funciones privadas de un cuerpo de paquete



procedimientos privados oracle (1)

La naturaleza de las funciones privadas es que son privadas. No hay vistas de diccionario de datos que los expongan de forma predeterminada. USER_PROCEDURES y USER_ARGUMENTS solo muestran información para procedimientos públicos (los definidos en un paquete spec0.

Sin embargo, podemos obtener información sobre ellos utilizando PL / SCOPE, pero para hacerlo necesitamos un poco de esfuerzo adicional:

  1. SQL> alter session set plscope_settings=''IDENTIFIERS:ALL'';
  2. SQL> alter package your_package compile body;

Ahora puede encontrar sus unidades de programa privadas con esta consulta:

select ui.type, ui.name, ui.usage_id from user_identifiers ui where ui.object_name = ''YOUR_PACKAGE'' and ui.usage = ''DEFINITION'' and ui.type in (''PROCEDURE'', ''FUNCTION'') minus ( select ''PROCEDURE'', upr.procedure_name from user_procedures upr where upr.object_name = ''YOUR_PACKAGE'' union select ''FUNCTION'', uarg.object_name from user_arguments uarg where uarg.package_name = ''YOUR_PACKAGE'' and uarg.position = 0 );

Para obtener los argumentos de un procedimiento privado, conecte USAGE_ID de la consulta anterior a esta consulta:

select ui.name , ui.type , ui.usage_id , ui2.type as param_datatype from user_identifiers ui left join user_identifiers ui2 on ui2.usage_context_id = ui.usage_id where ui.object_name = ''YOUR_PACKAGE'' and ui.usage = ''DECLARATION'' and ui.usage_context_id = :private_proc_usage_id /

Esto debe ser una combinación de la izquierda porque user_identifiers tiene entradas de tipo de datos para los tipos de datos escalares (carácter, número, fecha, clob), pero no tipos de datos complejos (xmltype, tipos definidos por el usuario).

Podemos obtener mucha información acerca de los procedimientos de PL / SCOPE, aunque no es tan fácil como consultar USER_PROCEDURES o USER_ARGUMENTS (de hecho, sorprendentemente torpe). Descubra más . Tenga en cuenta que los datos PL / SCOPE se almacenan en el tablespace SYSAUX, por lo que no debe entrar en contacto con su DBA.

Deseo obtener una lista con todos los procedimientos / funciones privadas de un cuerpo de paquete.

Para objetos públicos es fácil, pero no tengo idea de cómo hacer eso para objetos privados.