Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Listar recursivamente os conteúdos da visão DBA_DEPENDENCIES do Oracle


Você deseja especificar a palavra-chave NOCYCLE após CONNECT BY:

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

Há mais informações sobre NOCYCLE e as palavras-chave "CONNECT_BY_ISCYCLE" aqui:http://www.dba -oracle.com/t_advanced_sql_connect_by_loop.htm

e aqui:http://download.oracle. com/docs/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

Espero que ajude...

EDIT:Após comentários, você perdeu a 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;

BTW, mantendo a cláusula OWNER='FOO' where limita quaisquer dependências retornadas apenas ao objeto FOO, então você pode perder dependências de outros esquemas.

Edit 2:A chave primária de uma tabela de exibição é o proprietário, nomeie, portanto, o select deve começar com ambos e conectar-se por ambos. Você pode usar where para filtrar os resultados desejados.
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;