次のコードがあります。
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
dbms_random.string('U',5),
trunc(dbms_random.value(0000,9999)),
prod_id from dba_xy.product
prod_name from dba_xy.product;
end loop;
終わり;
実行すると、オラクルから次のエラーメッセージが表示されます。
prod_name from dba_xy.product;
*
8 行目のエラー: ORA-06550: 8 行目、29 列目: PL/SQL: ORA-00933: SQL コマンドが正しく終了していません ORA-06550: 3 行目、2 列目: PL/SQL: SQL ステートメントは無視されました
私がしようとしているのは、既存の prod_id と prod_name を、ディスパッチ テーブルに挿入された新しいデータとリンクすることです。製品テーブルで prod_name を一意のキーとして設定し、prod_id を主キーとして設定し、両方を配送テーブルで外部キー制約として設定しました。prod_name をディスパッチ テーブルに含めて、テーブルの読者が意味をなさない prod_id を単に与えるのではなく、prod_name を見つける必要があるものなどをより理解できるようにする必要があります。しかし、おそらく私は発送テーブルに prod_id を必要としないと考えていました。助けてください。
ディスパッチ テーブルから prod_id 列を削除した後、コードを変更しました。
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
dbms_random.string('U',5),
trunc(dbms_random.value(0000,9999)),
prod_name from dba_xy.product;
end loop;
終わり; /
そして、一意の制約に関する次のエラー メッセージが表示されました: begin * ERROR at line 1: ORA-00001: unique constraint (DBA_XY.PROD_NAME_UC) violationd ORA-06512: at line 3