Oracle
 sql >> Base de données >  >> RDS >> Oracle

La vue ALL_PROCEDURES n'affiche pas la PROCEDURE_NAME

À partir de la documentation,

ALL_PROCEDURES répertorie toutes les fonctions et procédures, ainsi que les propriétés associées. Par exemple, ALL_PROCEDURES indique si une fonction est en pipeline, parallèle activée ou une fonction d'agrégation. Si une fonction est en pipeline ou une fonction d'agrégation, le type d'implémentation associé (le cas échéant) est également identifié.

Il ne précise pas s'il répertorie une PROCÉDURE AUTONOME et une procédure enveloppée dans un PACKAGE de la même manière ou le considère-t-il différemment. Depuis, le procedure_name n'énumérerait pas le nom d'une procédure autonome comme on le voit dans le cas de test de la question ci-dessus.

PROCEDURE_NAME la colonne n'aura que le nom de la procédure pour les procédures qui font partie d'un PACKAGE . Pour les PROCÉDURES AUTONOMES, vous devez utiliser 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>

Vous pouvez obtenir la liste des procédures en utilisant procedure_name uniquement si elle est encapsulée dans un package.

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>

Vous pouvez maintenant voir le procedure_name comme procédure réelle et object_name comme package_name.

Bien sûr, la plupart du temps dans les systèmes de production, nous aurions des packages, et non des procédures autonomes. Mais, lors des tests et des démonstrations, nous compilons et exécutons des procédures autonomes. Il est donc bon de savoir comment Oracle gère les informations dans les vues *_PROCEDURES .