2

Oracle データベースを使用しており、2 つの id_poduct.nextval がエラーとして作成されるという問題に直面しています。ORA-00001: unique constraint (SYSTEM.SYS_C004166) violated

これは主キーです。すべてを使用することが要件です。ステートメントで 2 つの .nextval を使用できますか?

insert all 
   into sale_product values (id_product.nextval, id.currval, 'hello', 123, 1) 
   into sale_product values (id_product.nextval, id.currval, 'hi', 123, 1) 
select * from dual;
4

2 に答える 2

3
insert into sale_product
select id_product.nextval, id.currval, a, b, c
from
(
    select 'hello' a, 123 b, 1 c from dual union all
    select 'hi'    a, 123 b, 1 c from dual
);

これは構文を使用しませんinsert allが、同じテーブルに挿入するだけの場合は同じように機能します。

于 2012-06-09T22:04:27.420 に答える
2

INSERTの値はid_product.NEXTVALINSERTfirstと同じであるsecondため、unique constraint違反が発生します。制約を削除して挿入を実行すると、値が重複していることがわかります。

唯一の方法は、2 つのバルク INSERTS を連続して実行するか、範囲が異なる 2 つの別個のシーケンスを使用することです。後者の場合、非常に多くのコーディングとチェックが必要になります。

create table temp(id  number ,id2 number);

insert all 
   into temp values (supplier_seq.nextval, supplier_seq.currval) 
   into temp values (supplier_seq.nextval, supplier_seq.currval) 
select * from dual;


    ID        ID2
---------- ----------
     2          2
     2          2

参照 マルチテーブル挿入ステートメントのサブクエリは、シーケンスを使用できません http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm#i2080134

于 2012-06-08T16:23:37.200 に答える