CONNECT BYの後にNOCYCLEキーワードを指定します:
つまり
SELECT NAME,
TYPE,
REFERENCED_NAME,
REFERENCED_TYPE
FROM DBA_DEPENDENCIES
WHERE OWNER='FOO'
AND NAME='VIEW_01'
CONNECT BY NOCYCLE
PRIOR REFERENCED_NAME = NAME;
NOCYCLEおよび「CONNECT_BY_ISCYCLE」キーワードの詳細については、次を参照してください。 http://www.dba -oracle.com/t_advanced_sql_connect_by_loop.htm
およびここ: http://download.oracle。 com / docs / cd / B19306_01 / server.102 / b14200 / pseudocolumns001.htm
お役に立てば幸いです...
編集:コメントの後、STARTWITH句を見逃しました。
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;
ところで、OWNER ='FOO' where句を維持すると、FOOのオブジェクトに返される依存関係が制限されるため、他のスキーマからの依存関係を見逃す可能性があります。
編集2:ビューのテーブルの主キーは所有者、名前であるため、選択は両方で始まり、両方で接続する必要があります。 whereを使用して、目的の結果を除外できます。
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;