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을 구별하기로 했다고 치더라도
하위 호환성을 위해 쉽게 건드릴 수 없었던 슬픈 사연이 있다고 하네요
끝.
'IT' 카테고리의 다른 글
파이썬 반올림 짝수 우선 말고 사사오입 - IEEE 754 (0) | 2023.04.18 |
---|---|
크렉 exe 파일 실행하는법 - 파일에 바이러스 또는 기타 사용자 동의 없이 설치된 소프트웨어가 있기 때문에 작업이 완료 되지 않았습니다. (0) | 2023.04.10 |
PL SQL 오라클 FOR문과 CURSOR의 차이 (0) | 2023.04.05 |
MSSQL DB 대 DB 테이블 및 데이터 복사(DB to DB 데이터 복사엑셀말고 Script) (0) | 2020.12.21 |
SSAFY 싸피 대기업 취업 팁? 자소서 팁- 취업률, 연계율? (0) | 2020.06.15 |