我想通過兩個表中的相同序列生成值將顯式數據批量插入由外鍵鏈接的兩個不同表中。多表插入使用序列生成的id由於外鍵違例而失敗
我正在嘗試使用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。
你失去了一些東西。該錯誤是一個數據驗證錯誤,表示沒有滿足外鍵條件。它與數據的大小無關。一個可能的罪魁禍首是您要插入的附加行具有重複值。 –
謝謝您的輸入,那麼您如何解釋禁用FK會導致錯誤消失(所有數據正確插入,我應該提及)? –
因此,當您禁用FK並且使用相同的union all時,插入所有(超過256)行並且表具有相同的ID? – artm