Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A visualização ALL_PROCEDURES não mostra o PROCEDURE_NAME


Da documentação,

ALL_PROCEDURES lista todas as funções e procedimentos, juntamente com as propriedades associadas. Por exemplo, ALL_PROCEDURES indica se uma função está ou não em pipeline, habilitada em paralelo ou uma função agregada. Se uma função for pipeline ou uma função agregada, o tipo de implementação associado (se houver) também será identificado.

Ele não esclarece se listaria um PROCEDIMENTO INDEPENDENTE e um procedimento envolto em um PACKAGE da mesma forma ou considera-o de forma diferente. Desde então, o procedure_name não listaria o nome de um procedimento autônomo como visto no caso de teste na pergunta acima.

PROCEDURE_NAME coluna terá apenas o nome do procedimento para os procedimentos que fazem parte de um PACKAGE . Para PROCEDIMENTOS INDEPENDENTES, você precisa 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>

Você pode obter a lista de procedimentos usando procedure_name somente se estiver em um pacote.
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>

Agora você pode ver o procedure_name como o procedimento real e o object_name como o package_name.

Claro que, principalmente em sistemas de produção, teríamos pacotes, e não procedimentos isolados. Mas, enquanto testamos e demos, compilamos e executamos procedimentos autônomos. Portanto, é bom saber como a Oracle mantém as informações em *_PROCEDURES views .