Searched CASE Expression v13
A searched CASE
expression uses one or more Boolean expressions to determine the resulting value to return.
CASE WHEN <boolean-expression> THEN <result> [ WHEN <boolean-expression> THEN <result> [ WHEN <boolean-expression> THEN <result> ] ...] [ ELSE <result> ] END;
boolean-expression
is evaluated in the order in which it appears within the CASE
expression. result
is an expression that is type-compatible in the context where the CASE
expression is used. When the first boolean-expression
is encountered that evaluates to TRUE
, result
in the corresponding THEN
clause is returned as the value of the CASE
expression. If none of boolean-expression
evaluates to true then result
following ELSE
is returned. If no ELSE
is specified, the CASE
expression returns null.
The following example uses a searched CASE
expression to assign the department name to a variable based upon the department number.
DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; v_deptno emp.deptno%TYPE; v_dname dept.dname%TYPE; CURSOR emp_cursor IS SELECT empno, ename, deptno FROM emp; BEGIN OPEN emp_cursor; DBMS_OUTPUT.PUT_LINE('EMPNO ENAME DEPTNO DNAME'); DBMS_OUTPUT.PUT_LINE('----- ------- ------ ----------'); LOOP FETCH emp_cursor INTO v_empno, v_ename, v_deptno; EXIT WHEN emp_cursor%NOTFOUND; v_dname := CASE WHEN v_deptno = 10 THEN 'Accounting' WHEN v_deptno = 20 THEN 'Research' WHEN v_deptno = 30 THEN 'Sales' WHEN v_deptno = 40 THEN 'Operations' ELSE 'unknown' END; DBMS_OUTPUT.PUT_LINE(v_empno || ' ' || RPAD(v_ename, 10) || ' ' || v_deptno || ' ' || v_dname); END LOOP; CLOSE emp_cursor; END;
The following is the output from this program.
EMPNO ENAME DEPTNO DNAME ----- ------- ------ ---------- 7369 SMITH 20 Research 7499 ALLEN 30 Sales 7521 WARD 30 Sales 7566 JONES 20 Research 7654 MARTIN 30 Sales 7698 BLAKE 30 Sales 7782 CLARK 10 Accounting 7788 SCOTT 20 Research 7839 KING 10 Accounting 7844 TURNER 30 Sales 7876 ADAMS 20 Research 7900 JAMES 30 Sales 7902 FORD 20 Research 7934 MILLER 10 Accounting