iはテーブル
で使用されるシーケンスとトリガーと私のデータベースユーザーのテーブルのリストを取得クエリをしたいあなたはuser_triggers
ビューから、あなたのテーブルに関連付けられているトリガーを得ることができます。 user_dependencies
には、シーケンス(パッケージなど)以外のオブジェクトが含まれている可能性があるため、これらのトリガーに記録された依存関係は、user_sequences
ビューに結合すると、興味のあるもののみが表示されます。
このような何か、あなたが自分のスキーマを見ている、とあなたはシーケンス参照トリガーでのみ興味深いです(必ずしも「自動インクリメント」を行っていないが、可能性が高い)と仮定:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from user_tables tabs
join user_triggers trigs
on trigs.table_name = tabs.table_name
join user_dependencies deps
on deps.name = trigs.trigger_name
join user_sequences seqs
on seqs.sequence_name = deps.referenced_name;
SQL Fiddle demo。
実際に別のスキーマを見ている場合は、all_tables
などを使用して、探しているユーザーの所有者の列をフィルタリングして結合する必要があります。また、トリガーを持たない表やシーケンスを参照しないトリガーを組み込む場合は、外部結合を使用できます。
バージョンこれは、データ・ディクショナリ情報にアクセスするために必要なPRIVSを持っていると仮定しても、異なるスキーマを探している - などのテーブルは、彼らができない可能性がある、あなたに表示されていること:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from all_tables tabs
join all_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join all_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join all_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';
それはあなたが十分なPRIVSを持っている場合は、それらは、あなたがもう一度、DBAビューを見るために必要がある場合があります見ることができない場合は、次の
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from dba_tables tabs
join dba_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join dba_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join dba_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';
シーケンスは、トリガーまたは明示的な挿入ステートメント(ストアドプロシージャ/パッケージ内にある可能性があります)を介して間接的にのみ、テーブルに直接リンクされません。おそらくあなたは値を設定しているトリガーを探しています。しかし、あなたはそれについて知る必要はなく、IDはバックグラウンドで自動的に設定されます。シーケンス名とテーブル名を関連付ける命名規則がない限り、(all_source'で)トリガーコードを見ることができればそれを検索し、他の人に尋ねやすいテーブルフォームを作成する必要がありますユーザー、多分? –
実際には、テーブルで使用されるシーケンスとトリガを使用して、データベースユーザのテーブルのリストを取得するクエリが必要です。 – user2492525
@ user2492525では、Oracleがそれらの間の接続を維持しないため、どの表にどの順序が使用されているかを照会する方法はありません。あなたのアプリケーション*はIDを生成するためにトリガを使用するかもしれません。その場合、Alex Pooleの答えは有用かもしれません。別のアプリケーションがトリガーをまったく使用せず、アプリケーションコード内のシーケンスを呼び出すことがあります。要するに、問題に対する一般的な解決策はありません。 –