0

別のテーブルのデータを使用して oracle テーブルに複数の挿入を行おうとしていますが、シーケンスも使用しています。このようなもの: http://www.dbforums.com/oracle/1626242-insert-into-table-sequence-value-other-table.html

今..宛先テーブルには、シーケンスによって入力されている列に主キーがあり、主キー違反が発生しています。私の推測では、何らかの理由で sequence.nextval が機能していません。エラーはどこにありますか? これは私の実際のクエリです:

    insert into xxxx  (col1, col2, col3, col4, col5)
  select SEQ_CNT.nextval, inner_view.*
    from (select col1, 26, 0, 'N'
    FROM  yyyy WHERE col_ID = 30 AND DELETED = 'N' ) inner_view;
4

2 に答える 2

1

nextvalシーケンスの呼び出しが機能していないことが問題であるとは思えません。他のプロセスが、現在シーケンスから返されている値よりも大きな主キー値を持つデータをテーブルに挿入した可能性が非常に高くなります。もし、あんたが

SELECT seq_cnt.nextval
  FROM dual

それをテーブルの主キーの最大値と比較します

SELECT max(col1)
  FROM xxxxx

私の賭けは、最大値がnextvalシーケンスの よりも大きいことです。その場合は、通常、シーケンスを現在の最大値にリセットし、問題のあるデータがどのように挿入されたかを調べて、今後問題が再発しないようにする必要があります。

于 2013-02-26T17:26:56.583 に答える
0

外側のクエリはループしないため、シーケンスは増加しません。以下のこの解決策を試してください

insert into xxxx  (col1, col2, col3, col4, col5)
  select inner_view.*
    from (select SEQ_CNT.nextval, col1, 26, 0, 'N'
    FROM  yyyy WHERE col_ID = 30 AND DELETED = 'N' ) inner_view;
于 2017-02-22T17:13:32.110 に答える