子テーブルが静的な場合は、次のようなクエリを使用してすべてを有効または無効にするスクリプトを生成できます。
select 'alter table ' || fk.owner ||'.'|| fk.table_name
||' disable constraint '|| fk.constraint_name ||';'
from all_constraints fk
join all_constraints pk
on pk.owner = fk.r_owner
and pk.constraint_name = fk.r_constraint_name
where fk.constraint_type = 'R'
and fk.status = 'ENABLED'
and pk.constraint_type = 'P'
and pk.table_name = '<your parent table>;
これにより、alter table
削除/挿入の前に実行できるコマンドのリストが表示され、同じことを実行して、それらすべてを再度有効にするスクリプトを作成できます。
オンザフライで実行したい場合 (ストアド プロシージャからこれを実行する可能性が高い)、カーソルで同じことを実行し、動的 SQL として実行できます。
begin
for r in (
select 'alter table ' || fk.owner ||'.'|| fk.table_name
||' disable constraint '|| fk.constraint_name as stmt
from all_constraints fk
join all_constraints pk
on pk.owner = fk.r_owner
and pk.constraint_name = fk.r_constraint_name
where fk.constraint_type = 'R'
and fk.status = 'ENABLED'
and pk.constraint_type = 'P'
and pk.table_name = 'T42'
) loop
execute immediate r.stmt;
end loop;
end;
/
両方のオプションの SQL Fiddle デモ。