単純 CASE ステートメント (Simple CASE statement) (PL/SQL)
単純 CASE ステートメント (Simple CASE statement) では、式 (選択子 という) を、1 つ以上の WHEN 節内に指定した別の式と突き合わせます。 一致すると、対応する 1 つ以上のステートメントが実行されます。
構文
説明
- CASE selector-expression
- 各 match-expression と互換性のあるデータ・タイプの値を持つ式を指定します。 selector-expression の値が 1 番目の match-expression と一致すると、対応する THEN 節内のステートメントが実行されます。 一致するものがない場合は、対応する ELSE 節内のステートメントが実行されます。 一致するものがなく、かつ ELSE 節がない場合は、例外がスローされます。
- WHEN match-expression
- CASE ステートメント内で評価する式を指定します。 selector-expression が match-expression と一致すると、対応する THEN 節内のステートメントが実行されます。
- THEN
- 対応する Boolean 式が TRUE と評価された場合に実行するステートメントの開始を示すキーワード。
- statements
- 1 つ以上の SQL または PL/SQL ステートメントを指定します。各ステートメントの末尾にセミコロンを付けます。
- ELSE
- CASE ステートメントにおけるデフォルトのケースの開始を示すキーワード。
例
以下の例では、単純 CASE ステートメントを使用することにより、部門番号に基づいて、部門の名前および場所を変数に割り当てます。
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_deptno emp.deptno%TYPE;
v_dname dept.dname%TYPE;
v_loc dept.loc%TYPE;
CURSOR emp_cursor IS SELECT empno, ename, deptno FROM emp;
BEGIN
OPEN emp_cursor;
DBMS_OUTPUT.PUT_LINE('EMPNO ENAME DEPTNO DNAME '
|| ' LOC');
DBMS_OUTPUT.PUT_LINE('----- ------- ------ ----------'
|| ' ---------');
LOOP
FETCH emp_cursor INTO v_empno, v_ename, v_deptno;
EXIT WHEN emp_cursor%NOTFOUND;
CASE v_deptno
WHEN 10 THEN v_dname := 'Accounting';
v_loc := 'New York';
WHEN 20 THEN v_dname := 'Research';
v_loc := 'Dallas';
WHEN 30 THEN v_dname := 'Sales';
v_loc := 'Chicago';
WHEN 40 THEN v_dname := 'Operations';
v_loc := 'Boston';
ELSE v_dname := 'unknown';
v_loc := '';
END CASE;
DBMS_OUTPUT.PUT_LINE(v_empno || ' ' || RPAD(v_ename, 10) ||
' ' || v_deptno || ' ' || RPAD(v_dname, 14) || ' ' ||
v_loc);
END LOOP;
CLOSE emp_cursor;
END;このプログラムによって返される出力例を以下に示します。
EMPNO ENAME DEPTNO DNAME LOC
----- ------- ------ ---------- ---------
7369 SMITH 20 Research Dallas
7499 ALLEN 30 Sales Chicago
7521 WARD 30 Sales Chicago
7566 JONES 20 Research Dallas
7654 MARTIN 30 Sales Chicago
7698 BLAKE 30 Sales Chicago
7782 CLARK 10 Accounting New York
7788 SCOTT 20 Research Dallas
7839 KING 10 Accounting New York
7844 TURNER 30 Sales Chicago
7876 ADAMS 20 Research Dallas
7900 JAMES 30 Sales Chicago
7902 FORD 20 Research Dallas
7934 MILLER 10 Accounting New York