-1
テーブル上のすべての外部キー参照を選択する必要があります。私は動作するクエリを思いついたが、実行に9秒かかる。誰かが最適化を手伝うことができれば、とてもいいですね。どうもありがとうございました!ここでテーブル上のすべての外部キー参照の選択
はクエリです:
SELECT A.TABLE_NAME REFENCING_TABLE,
A.COLUMN_NAME REFENCING_COLUMN,
B.TABLE_NAME REFERENCED_TABLE,
B.COLUMN_NAME REFERENCED_COLUMN
from (select TABLE_NAME,
COLUMN_NAME,
REFERENCED_CONSTRAINT_NAME,
POSITION
from all_cons_columns C
join (select CONSTRAINT_NAME,
PK.REFERENCED_CONSTRAINT_NAME
from all_constraints FK
JOIN (select CONSTRAINT_NAME REFERENCED_CONSTRAINT_NAME
from all_constraints
where constraint_type in ('P','U') and
table_name = :tablename) PK
on FK.R_CONSTRAINT_NAME = PK.REFERENCED_CONSTRAINT_NAME
where constraint_type = 'R') FK
on C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME) A
join (select TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
POSITION
from all_cons_columns) B
on REFERENCED_CONSTRAINT_NAME = B.CONSTRAINT_NAME AND
A.POSITION = B.POSITION;
を、あなたは、スキーマ全体でこれを実行する必要がありますか?単一のスキーマでのみこれを行う必要がある場合は、 'all_something'ビューを' user_something'ビューに変更してください。次に、入力としてテーブル名を取得します。スキーマ間でこれを行う必要がある場合は、スキーマ名も入力する必要があります。別のスキーマに同じ名前の表があると、混乱や誤った結果につながる可能性があります。 – mathguy