게시일: Jun 03, 2013 7:29:27 AM
SELECT FOR UPDATE 문을 사용하지 않는 경우는 중복 데이터가 발생하여 이로 인한 오류를 발생시키기도 하므로 주의하자~
SELECT NVL(MAX(seq), 0) + 1
FROM tab
WHERE col_1 = '1';
SELECT /*+ INDEX_DESC (tab tab_index) */
NVL(MAX(seq), 0) + 1
FROM tab
WHERE col_1 = '1'
AND ROWNUM < 2 ;
- MAX(seq) + 1 대신 MAX(NVL(seq, 0)) + 1 을 사용하는 경우
위에서 COL_1 + seq 로 생성한 결합 인덱스를 활용할 수 없는 형태의 SQL 이므로 인덱스를 사용할 수 있도록 MAX 와 NVL 의 위치를 바꾸어 NVL(MAX(seq), 0) + 1 로 작성해야 한다.
- MAX(seq) + 1 대신 MAX(TO_NUMBER(seq)) + 1 을 사용하는 경우
위 경우와 마찬가지로 생성한 결합 인덱스를 활용할 수 없는 SQL 이다.
체번값의 중복을 없게 하려면 SELECT FOR UPDATE 구문을 사용해야 한다.