両方のテーブルで同じシーケンス生成値を使用して、外部キーによってリンクされた 2 つの異なるテーブルに明示的なデータを一括挿入したいと考えています。
INSERT ALL 命令を、連続する UNION ALL ステートメントで構成される WITH 句と一緒に使用して、それを実現しようとしています。
with 句が 256 行を超えない限り、すべて正常に機能します。別の UNION ALL エントリを追加するとすぐに、次のエラーが発生します。
ORA-02291: 整合性制約違反(MY_SCHEMA.FK_TABLE_B_TO_TABLE_A) - 親キーが見つかりません *原因: 外部キー値に一致する主キー値がありません。*処置: 外部キーを削除するか、一致する主キーを追加してください。
外部キー制約を無効にすると、すべてが正常に機能します (256 行を超える場合でも)。
私の指示は次のようになります:
insert all
into MY_SCHEMA.TABLE_A (ID, COLUMN_1, COLUMN_2)
values (MY_SCHEMA.MY_SEQUENCE.nextval, COLUMN_1, COLUMN_2)
into MY_SCHEMA.TABLE_B (ID, COLUMN_3)
values (MY_SCHEMA.MY_SEQUENCE.nextval, COLUMN_3)
with input_data as (
select 11 COLUMN_1, 12 COLUMN_2, 13 COLUMN_3
UNION ALL
select 21 COLUMN_1, 22 COLUMN_2, 23 COLUMN_3
UNION ALL
...
UNION ALL
select 31 COLUMN_1, 32 COLUMN_2, 33 COLUMN_3
)
select * from input_data;
そのような命令が処理できるデータ量に制限はありますか? または、他に何か不足していますか?
Oracle 11g と SQLDeveloper を使用しています。