TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-18 |
제목 | (V2.3) HANDLING NULL VALUE IN PL/SQL | ||
---|---|---|---|
(V2.3) HANDLING NULL VALUE IN PL/SQL
==================================== PURPOSE ------- 이 자료는 NULL value가 PL/SQL 내에서 사용될 때 알아두면 편리한 내용으 로 기본적으로 기억해야 할 몇 가지 rule을 소개하고자 한다. Explanation & Example --------------------- 1. NULL value와 어떤 다른 value 와의 비교 연산 결과는 항상 NULL이다. <예제> x := 5; y := NULL; ... IF x != y THEN -- yields NULL, not TRUE sequence_of_statements; -- not executed END IF; 위의 예제에서 x 값과 y 값이 다르기 때문에 조건문 내의 statement가 수행되리라고 예상할 수 있다. 그러나, NULL은 indeterminate한 값이므로, IF 조건문의 반환 결과는 NULL이고, 그 이하의 문장들은 수행되지 않는다. <예제> a := NULL; b := NULL; ... IF a = b THEN -- yields NULL, not TRUE sequence_of_statements; -- not executed END IF; 위의 예제에서 a 값과 b 값이 같기 때문에 조건문 내의 statement가 수행되리라고 예상할 수 있다. 그러나, NULL은 결정되어진 값이 아니므로, IF 조건문의 반환 결과 역시 NULL이고, 그 이하의 문장들은 수행되지 않는다. 2. NULL value에 논리 연산자인 NOT operator를 적용하면 NULL을 반환한다. <예제> 1) IF x > y THEN high := x; ELSE high := y; END IF; 2) IF NOT x > y THEN high := y; ELSE high := x; END IF; 이 예제는 NULL value에 NOT operator를 적용하게 되면 NULL을 return하므로, 위 두 개의 예제의 결과가 항상 같지는 않다는 것을 의미한다. IF 조건문의 결과가 FALSE 또는 NULL 일 경우 ELSE 절 내의 문장들이 수행된다. 만약, x나 y 둘 중의 하나 또는 x, y 둘 다 모두 NULL 일 경우, 1) 번에서는 y 값이 high 라는 변수에 assign 되지만, 2) 번에서는 x 값이 high 라는 변수에 assign 된다. 그러나, x, y 모두 어느 것도 NULL이 아니라면 같은 값이 high에 assign된다. 3. 위의 경우에서처럼 조건 제어문에서 만약 그 조건이 NULL을 반환한다면, 그 조건의 결과에 연관된 일련의 statement들은 수행되지 못한다. 4. Zero-Length Strings PL/SQL에서는 character function이나 boolean expression에 의해 반환된 Zero-Length String을 NULL 처럼 다룬다. 예를 들어, 다음 문장들은 NULL을 target 변수에 assign한다. <예> null_string := TO_VARCHAR2(''); zip_code := SUBSTR(address, 25, 0); valid := (name != ''); 어떤 문자열이 NULL인지 아닌지를 확인하기 위해서는 IS NULL operator를 사용하면 된다. LIKE '' 와 같은 용법은 허용되지 않는다. <예> IF my_string IS NULL THEN ... 5. Concatenation Operator Concatenation Operator는 NULL인 피연산자를 무시한다. <예> 'apple' || NULL || NULL || 'sauce' 위와 같은 표현식은 'applesauce' 를 반환한다. 6. Built-in function에 NULL argument가 들어갈 때, NULL이 아닌 다른 값을 반환받고자 할 때 사용되는 함수를 알아보기로 한다. 1) DECODE : DECODE 함수는 그 첫번째 인자의 값을 그 뒤에 이어지는 하나 또는 그 이상 의 search expression과 비교하여 그에 상응하는 결과값을 반환한다. <예> SELECT DECODE(rating, NULL, 1000, 'C', 2000, 'B', 4000, 'A', 5000) INTO credit_limit FROM accts WHERE acctno = my_acctno; 컬럼 rating의 값이 NULL이면 DECODE 함수는 1000을 반환한다. 2) NVL : NVL 함수는 그 첫번째 인자의 값이 NULL이면 두번째 인자의 값을 반환한다. <예> start_date := NVL(hire_date, SYSDATE); 위 예에서 hire_date 값이 NULL이면 SYSDATE를 반환하고, NULL이 아니면 hire_date를 반환한다. 3) REPLACE(char, search_string [, replacement_string]) : REPLACE 함수는 그 첫번째 인자의 값을 읽어서 search_string의 문자열을 replacement_string 의 값으로 대체해 준다. <예> 만약, replacement_string의 값이 생략되거나 NULL이면 search_string 에 나타난 string들은 모두 제거된다. syllabified_name := 'Gold-i-locks'; name := REPLACE(syllabified_name, '-', NULL); name의 값은 'Goldilocks'이다. <예> 만약, search_string이 NULL이면 첫번째 인자인 char가 그대로 반환된다. 세번째 인자는 옵션이므로, 세번째 인자의 존재 여부에 상관없이 첫번째 인자의 value를 반환한다. search_string과 replacement_string의 값이 모두 NULL 이라 할지라도 첫번째 인자인 char를 반환한다. new_string := REPLACE(old_string, NULL, my_string); 위와 같은 경우 old_string과 new_string의 value는 같다는 것이다. Reference Documents ------------------- Oracle 7 PL/SQL Developer's Guide |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |