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を使用して表示できます.
一般ユーザーは、次のSQLを使用して表示できます.
上記の違いは、ユーザーの範囲が異なることです.
上記の実行結果は次のとおりです.
上記の欠点は、テーブル名が文字列内、すなわちsqlを動的に実行する場合、オブジェクト名が得られないことです.例は次のとおりです.
結果は次のとおりです.
(二)動的SQL状況
動的sqlではソースコードからのみクエリーできます.リンクを参照:
https://community.oracle.com/thread/517948
System/sysdbaでは、次のSQLクエリーを使用できます.
一般ユーザーは、次のSQLクエリーを使用できます.
上記の例を例にとります.
結果は次のとおりです.
すべての参照テーブルの動的sqlを表示します.
System/sysdbaユーザー:
一般ユーザー:
もし友达が言ったら、私はただ時計がそれらの表外キーに引用されたのを見たいだけです.どうすればいいですか.
リンクを参照:
http://stackoverflow.com/questions/1143728/how-can-i-find-which-tables-reference-a-given-table-in-oracle-sql-developer
外部キー参照のSQLを表示するには、次の手順に従います.
皆さんに役に立つことを願っています.
全文が終わる.
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.
上記の実行結果は次のとおりです.
上記の欠点は、テーブル名が文字列内、すなわちsqlを動的に実行する場合、オブジェクト名が得られないことです.例は次のとおりです.
select * from all_dependencies where name like '%PROC_DBMS%' and referenced_name =upper('emp')
結果は次のとおりです.
(二)動的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
皆さんに役に立つことを願っています.
全文が終わる.