sql >> データベース >  >> RDS >> Oracle

OracleのDBA_DEPENDENCIESビューの濃度を再帰的に一覧表示します

    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;
    


    1. DapperとPostgresqlの使用-citextデータ型

    2. SQLの日付シリアル?

    3. IPv6をデータベースに保存する

    4. OracleAPEX-いくつかのリンクを含むルックアップテーブル