sql >> Base de Datos >  >> RDS >> Oracle

La vista ALL_PROCEDURES no muestra el PROCEDURE_NAME

De la documentación,

ALL_PROCEDURES enumera todas las funciones y procedimientos, junto con las propiedades asociadas. Por ejemplo, ALL_PROCEDURES indica si una función está canalizada o no, está habilitada en paralelo o es una función agregada. Si una función está canalizada o es una función agregada, también se identifica el tipo de implementación asociado (si lo hay).

No aclara si incluiría un PROCEDIMIENTO INDEPENDIENTE y un procedimiento envuelto en un PAQUETE de la misma manera o lo considera de otra manera. Dado que, el procedure_name no incluiría el nombre de un procedimiento independiente como se ve en el caso de prueba en la pregunta anterior.

PROCEDURE_NAME la columna solo tendrá el nombre del procedimiento para los procedimientos que forman parte de un PACKAGE . Para PROCEDIMIENTOS INDEPENDIENTES necesita usar OBJECT_NAME .

SQL> show user
USER is "LALIT"
SQL> CREATE OR REPLACE
  2  PROCEDURE new_proc
  3  AS
  4  BEGIN
  5    NULL;
  6  END;
  7  /

Procedure created.

SQL>
SQL> SELECT owner,
  2    object_name,
  3    procedure_name,
  4    object_type
  5  FROM all_procedures
  6  WHERE owner='LALIT'
  7  AND object_name='NEW_PROC';

OWNER OBJECT_NAME     PROCEDURE_NAME  OBJECT_TYPE
----- --------------- --------------- ---------------
LALIT NEW_PROC                        PROCEDURE

SQL>

Puede obtener la lista de procedimientos usando nombre_procedimiento solo si está envuelto en un paquete.

SQL> -- package
SQL> CREATE OR REPLACE
  2  PACKAGE new_pack
  3  IS
  4    PROCEDURE new_proc;
  5  END new_pack;
  6  /

Package created.

SQL>
SQL> -- package body with a procedure
SQL> CREATE OR REPLACE
  2  PACKAGE BODY new_pack
  3  IS
  4  PROCEDURE new_proc
  5  IS
  6  BEGIN
  7    NULL;
  8  END;
  9  END new_pack;
 10  /

Package body created.

SQL> SELECT owner,
  2    object_name,
  3    procedure_name,
  4    object_type
  5  FROM all_procedures
  6  WHERE owner='LALIT'
  7  AND procedure_name='NEW_PROC';

OWNER OBJECT_NAME     PROCEDURE_NAME  OBJECT_TYPE
----- --------------- --------------- -----------
LALIT NEW_PACK        NEW_PROC        PACKAGE

SQL>

Ahora podría ver el nombre_del_procedimiento como el procedimiento real y el nombre_del_objeto como el nombre_del_paquete.

Por supuesto, en la mayoría de los sistemas de producción tendríamos paquetes y no procedimientos independientes. Pero, mientras realizamos pruebas y demostraciones, compilamos y ejecutamos procedimientos independientes. Por lo tanto, es bueno saber cómo Oracle mantiene la información en *_PROCEDURES vistas .