Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Die Ansicht ALL_PROCEDURES zeigt PROCEDURE_NAME nicht an

Aus Dokumentation,

ALL_PROCEDURES listet alle Funktionen und Prozeduren zusammen mit den zugehörigen Eigenschaften auf. Beispielsweise zeigt ALL_PROCEDURES an, ob eine Funktion Pipeline-fähig, parallel aktiviert oder eine Aggregatfunktion ist oder nicht. Wenn es sich bei einer Funktion um eine Pipeline- oder eine Aggregatfunktion handelt, wird auch der zugeordnete Implementierungstyp (sofern vorhanden) identifiziert.

Es wird nicht klargestellt, ob es ein EIGENSTÄNDIGES VERFAHREN auflisten würde und eine Prozedur, die in ein PAKET verpackt ist genauso oder hält sie es anders. Da der procedure_name würde den Namen eines eigenständigen Verfahrens nicht auflisten, wie es im Testfall in der obigen Frage zu sehen ist.

PROCEDURE_NAME Spalte enthält nur den Prozedurnamen für die Prozeduren, die Teil eines PACKAGE sind . Für EIGENSTÄNDIGE VERFAHREN müssen Sie OBJECT_NAME verwenden .

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>

Sie können die Liste der Prozeduren nur mit Prozedurname abrufen, wenn sie in ein Paket eingeschlossen ist.

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>

Jetzt könnten Sie den Prozedurnamen als eigentlichen Vorgang und den Objektnamen als Paketnamen sehen.

Natürlich hätten wir in Produktionssystemen meistens Pakete und keine eigenständigen Prozeduren. Aber während der Tests und Demos kompilieren und führen wir eigenständige Prozeduren aus. Daher ist es gut zu wissen, wie Oracle die Informationen in *_PROCEDURES-Ansichten verwaltet .