5. 자주 하는 실수 (Tip)
실수 1: COALESCE 자리에 NVL 을 그대로 옮겨 쓴다
Oracle 코드를 MySQL·MSSQL 로 옮기면서 NVL 을 그대로 복사하는 실수가 흔합니다. NVL 은 Oracle·Tibero 전용이라 다른 DB 에서는 함수를 찾을 수 없다는 오류가 납니다. 처음부터 표준인 COALESCE 로 작성해 두면 이런 이관 작업 자체가 필요 없어집니다.
실수 2: AVG 안에 습관적으로 COALESCE(컬럼, 0) 을 넣는다
"NULL 이 있으면 일단 0 으로 채우고 보자"는 습관은 평균값을 조용히 낮춥니다. 2.4절에서 봤듯이 COALESCE 는 분모(행 개수)를 바꾸는 효과가 있어, 업무 규칙과 맞는지 먼저 확인해야 합니다.
실수 3: MySQL 의 ISNULL(x) 을 MSSQL 의 ISNULL(a, b) 과 같은 함수로 착각한다
이름이 같아 두 함수를 같은 것으로 생각하고 코드를 옮기면 인자 개수부터 오류가 납니다. 4절에서 확인했듯이 MySQL 의 ISNULL 은 판별 함수, MSSQL 의 ISNULL 은 대체 함수로 역할 자체가 다릅니다.
실수 4: NULLIF 의 두 인자 순서를 반대로 쓴다
NULLIF(a, b) 는 "a 와 b 가 같으면 NULL, 아니면 a"입니다. 0 으로 나누기를 막을 때는 나누는 값(분모)을 첫 번째 인자로 넣어야 하며, NULLIF(0, 분모) 처럼 순서를 바꾸면 분모가 0 이 아닐 때도 결과가 항상 0 이 되어 의도한 동작이 나오지 않습니다.