Oracle
 sql >> Database >  >> RDS >> Oracle

La vista ALL_PROCEDURES non mostra PROCEDURE_NAME

Dalla documentazione,

ALL_PROCEDURES elenca tutte le funzioni e le procedure, insieme alle proprietà associate. Ad esempio, ALL_PROCEDURES indica se una funzione è in pipeline, abilitata in parallelo o una funzione aggregata. Se una funzione è in pipeline o una funzione aggregata, viene identificato anche il tipo di implementazione associato (se presente).

Non chiarisce se elencherebbe una PROCEDURA STAND ALONE e una procedura racchiusa in un PACCHETTO allo stesso modo o lo considera in modo diverso. Poiché, il procedure_name non elencherebbe il nome di una procedura autonoma come si vede nel test case nella domanda precedente.

PROCEDURE_NAME colonna conterrà solo il nome della procedura per le procedure che fanno parte di un PACKAGE . Per le PROCEDURE STAND ALONE devi utilizzare 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>

Puoi ottenere l'elenco delle procedure usando nome_procedura solo se è racchiuso in un pacchetto.

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>

Ora puoi vedere il nome_procedura come la procedura effettiva e il nome_oggetto come il nome_pacchetto.

Naturalmente, per lo più nei sistemi di produzione avremmo pacchetti e non procedure autonome. Ma, durante i test e le demo, compiliamo ed eseguiamo procedure autonome. Pertanto, è utile sapere in che modo Oracle conserva le informazioni nelle *_PROCEDURES views .