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

Répertorier récursivement les contenus de la vue DBA_DEPENDENCIES d'Oracle

Vous souhaitez spécifier le mot-clé NOCYCLE après votre CONNECT BY :

c'est-à-dire

SELECT NAME, 
       TYPE, 
       REFERENCED_NAME, 
       REFERENCED_TYPE 
  FROM DBA_DEPENDENCIES 
 WHERE OWNER='FOO' 
   AND NAME='VIEW_01' 
CONNECT BY NOCYCLE
  PRIOR REFERENCED_NAME = NAME;

Il y a plus d'informations sur NOCYCLE et les mots clés "CONNECT_BY_ISCYCLE" ici :http://www.dba -oracle.com/t_advanced_sql_connect_by_loop.htm

et ici :http://download.oracle. com/docs/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

J'espère que ça aide...

EDIT :Après les commentaires, vous avez manqué la clause START WITH.

SELECT NAME, 
       TYPE, 
       REFERENCED_NAME, 
       REFERENCED_TYPE 
  FROM DBA_DEPENDENCIES 
 WHERE OWNER='FOO' 
 START WITH NAME='VIEW_01' 
CONNECT BY NOCYCLE
  PRIOR REFERENCED_NAME = NAME;

BTW, en gardant la clause OWNER='FOO' where limite toutes les dépendances renvoyées à l'objet de FOO uniquement, vous risquez donc de manquer des dépendances d'autres schémas.

Edit 2:La clé primaire d'une table de vue est propriétaire, nom donc la sélection doit commencer par les deux et se connecter par les deux. Vous pouvez utiliser où pour filtrer les résultats souhaités.

SELECT OWNER, NAME, TYPE,  
   REFERENCED_OWNER,
   REFERENCED_NAME, 
   REFERENCED_TYPE 
FROM DBA_DEPENDENCIES 
-- where referenced_type='TABLE'
START WITH owner = 'FOO' AND NAME='VIEW_01' 
CONNECT BY NOCYCLE
   PRIOR REFERENCED_NAME = NAME
   AND PRIOR REFERENCED_OWNER = OWNER;