Oracleは、データベース内のobjectによって使用されるテーブルの表示方法

6062 ワード

今日面白い質問を見ました.tableがデータベースのobjectで使用されていることをどうやって表示しますか?元の問題へのリンクは次のとおりです.
      http://www.itpub.net/forum.php?mod=viewthread&tid=1849997&extra=page%3D1%26filter%3Dtypeid%26typeid%3D37%26typeid%3D37
好奇心から検索してみましたが、個人的には上の質問によく答えられると思います.
 
(一)正常状況(動的SQLがない場合)
リンクを参照:
     http://www.oratable.com/which-objects-refer-to-this-table/
System/sysdbaユーザーは、次のSQLを使用して表示できます.
    
select * from dba_dependencies  where referenced_name =upper('emp') and owner=upper('tmd')

一般ユーザーは、次のSQLを使用して表示できます.
   
select * from all_dependencies  where referenced_name =upper('emp') 

上記の違いは、ユーザーの範囲が異なることです.
    
DBA_DEPENDENCIES describes all dependencies between objects in the database. This view may only be accessible to users with DBA rights.
USER_DEPENDENCIES describes dependencies between objects only in the current user’s schema. This view does not have the column OWNER, as it is contained in the view definition.

上記の実行結果は次のとおりです.
     Oracle怎么查看表被数据库中那些object使用_第1张图片     Oracle怎么查看表被数据库中那些object使用_第2张图片  
上記の欠点は、テーブル名が文字列内、すなわちsqlを動的に実行する場合、オブジェクト名が得られないことです.例は次のとおりです.
     Oracle怎么查看表被数据库中那些object使用_第3张图片   
select * from all_dependencies  where  name like '%PROC_DBMS%' and  referenced_name =upper('emp') 

結果は次のとおりです.
    Oracle怎么查看表被数据库中那些object使用_第4张图片  
(二)動的SQL状況
動的sqlではソースコードからのみクエリーできます.リンクを参照:
    https://community.oracle.com/thread/517948
System/sysdbaでは、次のSQLクエリーを使用できます.
    
select name,type,text from dba_source where upper(text) like '%EMP%'  and owner=upper('tmd')

一般ユーザーは、次のSQLクエリーを使用できます.
   
select name,type,text from user_source where upper(text) like '%EMP%' 

上記の例を例にとります.
   
select name,type,text from user_source where upper(text) like '%EMP%' and name like 'PROC_DBMS%'

結果は次のとおりです.
      
すべての参照テーブルの動的sqlを表示します.
System/sysdbaユーザー:
   
select name, type, text
  from dba_source
 where name in (select name
                  from dba_source
                 where upper(text) like '%EMP%'
                   and owner = upper('tmd')
                minus
                select name
                  from dba_dependencies
                 where referenced_name = upper('emp')
                   and owner = upper('tmd'))
   and owner = upper('tmd')

一般ユーザー:
   
select name, type, text
  from user_source
 where name in (select name
                  from user_source
                 where upper(text) like '%EMP%'
                minus
                select name
                  from all_dependencies
                 where referenced_name = upper('emp'))

  
もし友达が言ったら、私はただ時計がそれらの表外キーに引用されたのを見たいだけです.どうすればいいですか.
リンクを参照:
    http://stackoverflow.com/questions/1143728/how-can-i-find-which-tables-reference-a-given-table-in-oracle-sql-developer
外部キー参照のSQLを表示するには、次の手順に従います.
   
select table_name, constraint_name, status, owner
  from all_constraints
 where r_owner = 'TMD'
   and constraint_type = 'R'--foreign key
   and r_constraint_name in (select constraint_name
                               from all_constraints
                              where constraint_type in ('P', 'U')--pk unique key
                                --and table_name = 'DEPT'
                                and owner = 'TMD')
 order by table_name, constraint_name

    
皆さんに役に立つことを願っています.
全文が終わる.