현재 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
'Database' 카테고리의 다른 글
[ORACLE] LISTAGG가 오라클 버전 문제로 에러날 때 -> WM_CONCAT 이용하자 (0) | 2020.12.21 |
---|---|
[Oracle] 프로시저 / ORA-06553 - 호출 시 인수의 갯수나 유형이 잘못되었습니다 해결법 (1) | 2020.09.05 |
NUMBER 타입 정의하는 방법 (3가지) (0) | 2020.07.16 |
[Oracle] GREATEST, LEAST 함수 (0) | 2020.07.07 |
[Oracle] 숫자를 문자로 변환하는 포맷 FM9990.99 (0) | 2020.06.30 |