본문 바로가기

Database

[Oracle] SEQ를 이용해서 MAX값 따오는 경우 발생할 수 있는 실수

 

현재 DB에 저장되어 있는 컬럼 SEQ 중 최대값을 가져와 + 1 한 값을 구하기 위해 다음과 같이 쿼리를 작성했다.

SELECT MAX(NVL(SEQ, 0)) + 1 FROM TBL

 

 

하지만 아무 row도 나오지 않는다.

상식적으로 SEQ가 null인 경우 '0' 을 반환하라고 쿼리를 작성한 것이나, NVL을 해보면 아무 row도 반환되지 않는다.

SELECT NVL(SEQ, 0) FROM TBL

 

 

 

 

 

결론부터 말하면, 다음과 같이 그룹함수를 이용하여 '해당 테이블에 아무 데이터도 없는 경우여 무조건 빈 row 하나는 리턴되게' 한 후 원하는 작업을 해야 한다.

 

SELECT NVL(MAX(SEQ), 0) + 1 FROM TBL

 

 

 

이게 정상 작동할 수 있는 이유는 해당 테이블에 아무런 데이터가 없어도 그룹함수를 이용하면, 빈 row 하나는 리턴되기 때문이다.

SELECT MAX(SEQ) FROM TBL