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 .