sql >> Databáze >  >> RDS >> Oracle

Rekurzivně vypisujte obsahy pohledu Oracle DBA_DEPENDENCIES

Chcete zadat klíčové slovo NOCYCLE za CONNECT BY:

tj.

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

Více informací o NOCYCLE a klíčových slovech "CONNECT_BY_ISCYCLE" je zde:http://www.dba -oracle.com/t_advanced_sql_connect_by_loop.htm

a zde:http://download.oracle. com/docs/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

Doufám, že to pomůže...

EDIT:Po komentářích jste vynechali klauzuli 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, ponechání klauzule OWNER='FOO' kde omezuje jakékoli závislosti vrácené pouze na objekt FOO, takže možná přehlédnete závislosti z jiných schémat.

Edit 2:Primárním klíčem tabulky pohledu je vlastník, jméno, tedy výběr by měl začínat oběma a připojovat se oběma. Můžete použít kde k odfiltrování požadovaných výsledků.

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;


  1. Chyba sql:Převod datového typu varchar na datový typ datetime vedl k hodnotě mimo rozsah

  2. Převeďte každý znak v řetězci na řádek

  3. SQL Server - Jak uzamknout tabulku, dokud neskončí uložená procedura

  4. Více spojení SQL ze stejné tabulky pomocí Codeigniter