DECLARE
cursor curs is select * from starting;
appleId number;
bananaId number;
BEGIN
for foo in curs
LOOP
insert into apple (id, weight)
values(1,1)
returning id into appleId;
insert into banana(id,weight)
values(1,3)
returning id into bananaId;
insert into apple_banana_lookup
values(1,appleId,bananaId);
END LOOP;
COMMIT;
END;
上記のコードは、外部キー制約違反になります。ID
のフィールドがApple
まだ存在していないと主張します。私の質問は、このコードを上記のように機能させ、apple_banana_lookup
テーブルにappleId
とで参照されるキーを正常に永続化させる方法ですbananaId
。追加として、特定のカーソルに最大2億のレコードが存在するため、挿入のたびにコミットする必要がないようにしapple
ます。banana
アップデート
スキーマ宣言:
create table apple
(
id number(20,0) not null,
weight number (20,0)
);
create table banana
(
id number(20,0) not null,
weight number(20,0)
) ;
create table apple_banana_lookup
(
id number(20,0) not null,
appleId number(20,0) not null,
bananaId number(20,0) not null
CONSTRAINT "apple_fk" foreign key ("appleId")
REFERENCES "apple" ("id"),
CONSTRAINT "banana_fk" foreign key ("bananaId")
REFERENCES "banana" ("id"),
);
エラーメッセージ:
ORA-02291: integrity constraint
parent key not found