본문 바로가기

IT

오라클 PL SQL IF문 공백 '' NULL일까? 어떻게 처리될까? 초기화 하는법


PL SQL에서 변수를 잘못 초기화 했을 때 IF문을 타지 않는 Case가 발생 할 수 있습니다.

전제 : var 는 varchar2라고 가정해보겠습니다.

CASE 1

var = '' 로 초기화

IF var = ''
THEN
    조건  
END IF

이때 IF문 안의 내용은 처리되지 않습니다.

이 것을 처리하려면 아래와 같이 코딩해야 합니다.

IF var IS NULL
THEN
     조건
END IF

변수 var가 ''(빈 문자열)으로 초기화되면, IF var = '' 조건절에서 거짓(false)으로 처리됩니다.
그러나, IF a IS NULL 조건절에서는 참(true)으로 처리됩니다.

''(빈 문자열)은 변수에 값이 할당된 상태이므로, 변수는 NULL이 아닌 값으로 취급된다고 생각했는데,
오라클 에서는 NULL로 처리되고 있습니다.

오라클에서 길이가 없는 문자열(빈 문자열)은 null 로 취급됩니다.

말이 조금 어렵죠?
그냥 PL SQL 에서 ''(빈 문자열)은 NULL로 걸러야 된다는 것을 기억하시면 됩니다.

따라서 오라클에서 빈문자열은 NULL로 걸러야 합니다.
심지어 ''(빈 문자열)은 어떤 조건을 걸어도 TRUE가 될 수 없습니다.
예를들어서 Trim을 걸거나 Length를 활용하는 것도 불가능 하다는 것 입니다.
오직 IS NULL로만 처리가 가능합니다.

Why does Oracle 9i treat an empty string as NULL?

이 질문은 해외에서도 아주 많이 일어나고 있는데요,
프로그렘 IF문을 안타면 심각한 오류가 만히 발생 할태니 당연하다고 볼 수 있죠.
SQL과 관련된 표준이 만들어지기전 오라클에서는 이미 빈 문자열은 NULL이었습니다.
이렇게 디자인 된 상태에서 표준이 공백문자와 NULL을 구별하기로 했다고 치더라도
하위 호환성을 위해 쉽게 건드릴 수 없었던 슬픈 사연이 있다고 하네요

끝.

반응형