조건식 사용
일반 기능
일반 함수는 데이터베이스에서 NULL 값을 처리하는 데 사용됩니다. 일반 NULL 처리 함수의 목적은 NULL 값을 대체 값으로 바꾸는 것입니다. 아래에서 이러한 기능을 간략하게 살펴 보겠습니다.
NVL
NVL 함수는 NULL 값을 대체 값으로 대체합니다.
통사론:
NVL( Arg1, replace_with )
구문에서 두 매개 변수는 모두 필수입니다. NVL 함수는 모든 유형의 데이터 유형에서 작동합니다. 또한 원본 문자열의 데이터 유형과 교체는 호환 가능한 상태 여야합니다. 즉, Oracle이 동일하거나 암시 적으로 변환 할 수 있어야합니다.
arg1이 문자 값이면 oracle은 대체 문자열을 비교하기 전에 arg1과 호환되는 데이터 유형으로 변환하고 expr1의 문자 집합에 VARCHAR2를 반환합니다. arg1이 숫자이면 Oracle은 숫자 우선 순위가 가장 높은 인수를 결정하고 다른 인수를 해당 데이터 형식으로 암시 적으로 변환 한 다음 해당 데이터 형식을 반환합니다.
아래 SELECT 문은 직원이 아직 작업에 할당되지 않은 경우 (즉, JOB_ID가 NULL 인 경우) 'n / a'를 표시합니다. 그렇지 않으면 실제 JOB_ID 값이 표시됩니다.
SELECT first_name, NVL(JOB_ID, 'n/a')
FROM employees;
NVL2
NVL에 대한 개선 사항으로 Oracle은 NULL 열 값뿐만 아니라 NOT NULL 열 값을 대체하는 기능을 도입했습니다. NVL2 함수는 NULL이 아닌 값뿐만 아니라 NULL을 대체 값으로 대체하는 데 사용할 수 있습니다.
통사론:
NVL2( string1, value_if_NOT_null, value_if_null )
아래 SELECT 문은 직원의 JOB_CODE가 NULL 인 경우 'Bench'를 표시합니다. JOB CODE의 명확한 null이 아닌 값의 경우 상수 값 'Job Assigned'가 표시됩니다.
SQL> SELECT NVL2(JOB_CODE, 'Job Assigned', 'Bench')
FROM employees;
NULLIF
NULLIF 함수는 두 인수 expr1 및 expr2를 비교합니다. expr1과 expr2가 같으면 NULL을 반환합니다. 그렇지 않으면 expr1을 반환합니다. 다른 null 처리 함수와 달리 첫 번째 인수는 NULL이 될 수 없습니다.
통사론:
NULLIF (expr1, expr2)
첫 번째 인수는 NULL로 평가되는 표현식 일 수 있지만 리터럴 NULL 일 수는 없습니다. 함수를 실행하려면 두 매개 변수가 모두 필수입니다.
아래 쿼리는 두 입력 값 12가 같으므로 NULL을 반환합니다.
SELECT NULLIF (12, 12)
FROM DUAL;
마찬가지로 아래 쿼리는 두 문자열이 같지 않기 때문에 'SUN'을 반환합니다.
SELECT NULLIF ('SUN', 'MOON')
FROM DUAL;
COALESCE
보다 일반적인 형식의 NVL 인 COALESCE 함수는 인수 목록에서 null이 아닌 첫 번째 식을 반환합니다. 최소 2 개의 필수 매개 변수를 사용하지만 최대 인수에는 제한이 없습니다.
통사론:
COALESCE (expr1, expr2, ... expr_n )
아래 SELECT 쿼리를 고려하십시오. 직원의 주소 필드에 입력 된 첫 번째 null이 아닌 값을 선택합니다.
SELECT COALESCE (address1, address2, address3) Address
FROM employees;
흥미롭게도 COALESCE 함수의 작동은 IF..ELSIF..ENDIF 구조와 유사합니다. 위의 쿼리는 다음과 같이 다시 작성할 수 있습니다.
IF address1 is not null THEN
result := address1;
ELSIF address2 is not null THEN
result := address2;
ELSIF address3 is not null THEN
result := address3;
ELSE
result := null;
END IF;
조건부 함수
Oracle은 SQL 문에서도 조건을 부과하는 조건부 함수 DECODE 및 CASE를 제공합니다.
DECODE 기능
함수는 IF..THEN..ELSE 조건부 프로 시저 명령문의 SQL 동등성입니다. DECODE는 모든 데이터 유형의 값 / 열 / 표현식에서 작동합니다.
통사론:
DECODE (expression, search, result [, search, result]... [, default])
DECODE 함수는 각 검색 값에 대해 표현식을 순서대로 비교합니다. 표현식과 검색 인수가 같으면 해당 결과를 반환합니다. 일치하지 않는 경우 정의 된 경우 기본값이 반환되고 그렇지 않은 경우 NULL이 반환됩니다. 유형 호환성이 일치하지 않는 경우 Oracle은 내부적으로 가능한 암시 적 변환을 수행하여 결과를 반환합니다.
사실 Oracle은 DECODE 기능으로 작업하는 동안 두 개의 null을 동등한 것으로 간주합니다.
SELECT DECODE(NULL,NULL,'EQUAL','NOT EQUAL')
FROM DUAL;
DECOD
-----
EQUAL
expression이 null이면 Oracle은 null 인 첫 번째 검색의 결과를 반환합니다. DECODE 기능의 최대 구성 요소 수는 255입니다.
SELECT first_name, salary, DECODE (hire_date, sysdate,'NEW JOINEE','EMPLOYEE')
FROM employees;
CASE 표현식
CASE 표현식은 DECODE와 동일한 개념으로 작동하지만 구문과 사용법이 다릅니다.
통사론:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
Oracle 검색은 왼쪽에서 시작하여 참 조건을 찾을 때까지 오른쪽으로 이동 한 다음 그와 관련된 결과 표현식을 반환합니다. 참인 조건이없고 ELSE 절이 존재하면 Oracle은 else로 정의 된 결과를 반환합니다. 그렇지 않으면 Oracle은 null을 반환합니다.
CASE 표현식의 최대 인수 수는 255 개입니다. 단순 CASE 표현식의 초기 표현식 및 선택적 ELSE 표현식을 포함하여 모든 표현식이이 제한에 포함됩니다. 각 WHEN ... THEN 쌍은 두 개의 인수로 계산됩니다. 이 제한을 초과하지 않으려면 return_expr 자체가 CASE 표현식이되도록 CASE 표현식을 중첩 할 수 있습니다.
SELECT first_name, CASE WHEN salary < 200 THEN 'GRADE 1'
WHEN salary > 200 AND salary < 5000 THEN 'GRADE 2'
ELSE 'GRADE 3'
END CASE
FROM employees;
ENAM CASE
---- -------
JOHN GRADE 2
EDWIN GRADE 3
KING GRADE 1