Oracle DECODE function
Oracle DECODE 함수는 1번 인수가 2번 인수와 같다면 3번 인수를, 4번 인수와 같다면 5번 인수를 반환하는 함수입니다. 오라클 디코드 함수를 구체적인 예와 함께 안내해드릴게요.
먼저, DECODE 함수의 첫 번째 특징은 최소 3개의 인수가 필요하다는 것입니다. 그 이유는 1번 인수가 2번 인수에 주어진 값과 동일하면 3번 인수를 반환하기 위하기 때문이며 그로 인해 적어도 3개의 인수가 필요한 것입니다. 1번 인수와 2번 인수가 다르다면 NULL 을 반환합니다.
DECODE 함수의 두 번째 특징은 매개변수 인자의 개수가 홀수냐 짝수냐, 여부에 따라 반환을 NULL 로 하느냐 안 하느냐를 결정합니다. 예를 들면 DECODE (JOB, 'CLERK', 'Job is Clerk') 은 인수의 개수가 홀수입니다. 그러므로 JOB 이 'CLERK' 이라면 'Job is Clerk' 값을 반환하며, 그 이외에는 NULL 을 반환합니다. 즉, DECODE (JOB, 'CLERK', 'Job is Clerk', NULL) 과 동일한 뜻입니다.
오라클 디코드 함수
오라클 디코드 함수에서 예시를 통해 인수의 개수만큼 결과가 어떻게 달라지나 안내해드리겠습니다. 예제자료는 [JOB] 이 CLERK, SALESMAN, MANAGER 인 3명에 대해 DECODE 함수의 인수를 점점 늘려가며 반환하는 값이 어떻게 변화 하는지 보여드리고 있습니다.
- DECODE(JOB) => ORA-00938: 함수의 인수가 충분하지 않습니다. not enough arguments for function. 오라클 디코드 함수는 최소 3개의 매개변수 인자가 필요합니다.
- DECODE(JOB, 'CLERK') => ORA-00938: 함수의 인수가 충분하지 않습니다. not enough arguments for function. 오라클 오류 사유는 상기와 같습니다.
- DECODE(JOB, 'CLERK', 'Job is Clerk') => JOB 이 'CLERK' 이면 'Job is Clerk' 을 반환합니다. JOB이 그외의 값인 경우 NULL 을 반환합니다. DECODE(JOB, 'CLERK', 'Job is Clerk', NULL) 과 결과가 동일합니다.
- DECODE(JOB, 'CLERK', 'Job is Clerk', 'Job is Not Clerk') => JOB 이 'CLERK' 이면 'Job is Clerk' 을 반환하고 아닌 경우 'Job is Not Clerk' 을 반환합니다.
- DECODE(JOB, 'CLERK', 'Job is Clerk', 'SALESMAN', 'Job is Salesman') => JOB 이 'CLERK' 이면 'Job is Clerk' 을 반환합니다. 'SALESMAN' 인 경우 'Job is Salesman' 을 반환합니다. JOB 이 'CLERK' 도 아니고 'SALESMAN' 도 아니라면 NULL 입니다.
- DECODE(JOB, 'CLERK', 'Job is Clerk', 'SALESMAN', 'Job is Salesman', 'Other Job') => JOB 이 'CLERK' 이면 'Job is Clerk' 을 반환합니다. 'SALESMAN' 인 경우 'Job is Salesman' 을 반환합니다. JOB 이 'CLERK' 도 아니고 'SALESMAN' 도 아니라면 'Other Job' 을 반환합니다.
아래의 예시 자료와 함께 Oracle Decode Function 에 대한 교육을 종료하겠습니다.
WITH TA
AS (SELECT *
FROM EMP
WHERE EMPNO IN ('7369', '7499', '7566'))
SELECT 1 TRIAL_NUMBER,
JOB,
'DECODE (JOB)' DECODE_METHOD,
'ORA-00938: 함수의 인수가 충분하지 않습니다'
RETURN_VALUE
FROM TA
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL
FROM DUAL
UNION ALL
SELECT 2 TRIAL_NUMBER,
JOB,
'DECODE (JOB, ''CLERK'')',
'ORA-00938: 함수의 인수가 충분하지 않습니다'
FROM TA
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL
FROM DUAL
UNION ALL
SELECT 3 TRIAL_NUMBER,
JOB,
'DECODE (JOB, ''CLERK'', ''Job is Clerk'')',
DECODE (JOB, 'CLERK', 'Job is Clerk')
FROM TA
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL
FROM DUAL
UNION ALL
SELECT 4 TRIAL_NUMBER,
JOB,
'DECODE (JOB, ''CLERK'', ''Job is Clerk'', ''Job is Not Clerk'')',
DECODE (JOB, 'CLERK', 'Job is Clerk', 'Job is Not Clerk')
FROM TA
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL
FROM DUAL
UNION ALL
SELECT 5 TRIAL_NUMBER,
JOB,
'DECODE (JOB, ''CLERK'', ''Job is Clerk'', ''SALESMAN'', ''Job is Salesman'')',
DECODE (JOB, 'CLERK', 'Job is Clerk', 'SALESMAN', 'Job is Salesman')
FROM TA
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL
FROM DUAL
UNION ALL
SELECT 6 TRIAL_NUMBER,
JOB,
'DECODE (JOB, ''CLERK'', ''Job is Clerk'', ''SALESMAN'', ''Job is Salesman'', ''Other Job'')',
DECODE (JOB,
'CLERK', 'Job is Clerk',
'SALESMAN', 'Job is Salesman',
'Other Job')
FROM TA