2017-01-29 1 views
-1

oracle DB에서 배치 삽입을 시도하고있었습니다. 쿼리 :primark 키에 max (column) +1을 사용하여 oracle에 일괄 처리 삽입시 DuplicateException 오류가 발생합니다.

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

배치 삽입물에는 두 가지 유사한 문구가 있습니다. 위의 작업은 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

또 다른 가능성은 두 개의 삽입이 동시에 충돌하는 것입니다. –

+0

제 질문은 : 배치 삽입물에 문제가 있습니까? – arvind

관련 문제