Java에서 addBatch()/executeBatch()를 사용하여 INSERT를 하려고 합니다. 0 6 3,315

by 이승언(폴리) [어플리케이션관련] [2013.11.11 15:38:46]


Java에서 addBatch()/executeBatch()를 사용하여 INSERT를 하려고 합니다.
아래와 같이 PK 중에  순번이 있을 때, 자동 순번 채번하게 할 수 있는 방법이 없나요?


CREATE TABLE TBL
(    KEY1    VARCHAR2(10);
,    KEY2    VARCHAR2(10);
,    SEQ3    NUMBER(5);
,    DATA1    VARCHAR2(50);
,    DATA2    VARCHAR2(100);
);

CREATE UNIQUE INDEX TBL_PK ON TBL(KEY1, KEY2, SEQ3);

Java 에서
INSERT INTO TBL(KEY1, KEY2, SEQ3, DATA1, DATA2)
VALUES( ?, ?,
NVL((SELECT /*+ INDEX_DESC(A TBL_PK) SEQ + 1 FROM TBL WHERE KEY1 = ? AND KEY2 = ? AND ROWNUM = 1), 1)
, ?, ?);

위의  SQL을 사용하여  addBatch(), executeBatch() 를 이용하면, PK  중복오류가 발생하는데요.
피해갈 방법이 없나요?
by 용근님 [2013.11.11 16:16:23]

1. selectOne  max 순번 Read

2. 데이터량만큼 For 문  max순번 + 1 Set addBatch

3. excuteBatch();

by 이승언(폴리) [2013.11.11 16:18:07]
용근님, 방법 말고는 없을까요?  T,T
다른 방법이...

by 우리집아찌 [2013.11.11 17:25:08]

프로시져 쓰세요..

by 홍상표 [2013.11.11 18:46:41]
오라클시퀀스를 생성해서 사용하시는게 좋을듯 합니다..
성능측면에서도 좋습니다..

by 야신 [2013.11.12 09:26:48]

java 라면 웹화면일텐데 키 중복의 가능성 때문에 시퀀스를 추천드립니다.

by 꼬마의꿈 [2013.11.12 10:55:45]
nvl(max(~),0)+1

insert 문장에 (select max(~) +1 from ~ where ~)
힌트는 ~ ;;;;
이것도 안되면 쿼리 실행전에 맥스값추출쿼리를 한번더 돌리시는게
문제는는 동시에 인서트 난 1인데 2로 들어 가는 안타까운순간이.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입