sql >> Base de Datos >  >> RDS >> Oracle

Enumere recursivamente los contenidos de la vista DBA_DEPENDENCIAS de Oracle

Desea especificar la palabra clave NOCYCLE después de CONNECT BY:

es decir,

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

Hay más información sobre NOCYCLE y las palabras clave "CONNECT_BY_ISCYCLE" aquí:http://www.dba -oracle.com/t_advanced_sql_connect_by_loop.htm

y aquí:http://download.oracle. com/docs/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

Espero que ayude...

EDITAR:después de los comentarios, se ha perdido la cláusula 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;

Por cierto, mantener la cláusula OWNER='FOO' where limita las dependencias devueltas solo al objeto de FOO, por lo que es posible que se pierda las dependencias de otros esquemas.

Edición 2:la clave principal de una tabla de vista es el propietario, por lo tanto, la selección debe comenzar con ambos y conectarse por ambos. Puede usar where para filtrar los resultados deseados.

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;