sql oracle view plsql metadata

sql - La vista ALL_PROCEDURES no muestra el PROCEDURE_NAME



oracle view (1)

¿Por qué no puedo ver mi procedimiento en la vista user_procedures ? ¿Por qué el filtro procedure_name en la vista all_procedures no devuelve filas?

Esta pregunta es principalmente para ayudar a aquellos que están buscando una pregunta similar. Espero que cualquiera que busque esa pregunta encuentre aquí una respuesta.

Caso de prueba :

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 procedure_name=''NEW_PROC''; no rows selected SQL>


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, habilitada en paralelo o una función de agregado. Si una función se canaliza o una función agregada, también se identifica el tipo de implementación asociado (si existe).

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

PROCEDURE_NAME columna PROCEDURE_NAME solo tendrá el nombre del procedimiento para los procedimientos que forman parte de un PACKAGE . Para PROCEDIMIENTOS INDEPENDIENTES, debe 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 procedure_name solo si está empaquetado 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 procedure_name como el procedimiento real, y el object_name como el package_name.

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