2017-01-29 3 views
-1

oracle DBにバッチ・インサートを実行しようとしていました。クエリは次のとおりです。プリマーク・キーにmax(column)+ 1を使用してOracleでバッチ・インサートを実行すると、DuplicateExceptionエラーが発生する

INSERT INTO <table-name> (A, B) values ((SELECT MAX(A)+ 1 FROM <>table-name), "xyz") 

バッチインサートにも同様の2つの文があります。上記の操作でDuplicateExceptionがスローされました。

+2

このようにIDを生成することは悪い考えです。 – mustaccio

答えて

1

Aを計算するためには、実際にシーケンスまたは計算(生成)列を使用する必要がありますが、オラクルはこれまで以上に難しくなってきました。

ただし、問題がAの場合は、Aは常にNULLです。その場合:

INSERT INTO <table-name> (A, B) 
    SELECT COALESCE(MAX(A), 0) + 1, 'xyz' 
    FROM <table-name>; 

またB上またはinsertに含まれていない他のいくつかの列に一意のインデックス/制約がある場合があります。そして、完全性のために、エラーがテーブルの挿入トリガーから来ている可能性があることを言及する必要があります。

+0

いいえ、 'A'は' NULLL 'ではありません – arvind

+0

もう1つの可能性は同時に2つの挿入です。 –

+0

私の質問です:バッチインサートは何か問題を引き起こすでしょうか? – arvind

関連する問題