搜索型 CASE 语句 (PL/SQL)
搜索型 CASE 语句使用一个或多个布尔表达式来确定所要执行的语句。
语法
描述
- CASE
- 此关键字引入 CASE 语句中的第一个 WHEN 子句。
- WHEN 布尔表达式
- 指定一个表达式,当控制流进入定义此表达式的 WHEN 子句时,将对此表达式进行求值。如果 布尔表达式 求值为 TRUE,那么将执行相应 THEN 子句中的语句。如果 布尔表达式 未求值为 TRUE,那么将执行相应 ELSE 子句中的语句。
- THEN
- 此关键字引入要在相应布尔表达式求值为 TRUE 时执行的语句。
- statement
- 指定一个或多个 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
WHEN v_deptno = 10 THEN v_dname := 'Accounting';
v_loc := 'New York';
WHEN v_deptno = 20 THEN v_dname := 'Research';
v_loc := 'Dallas';
WHEN v_deptno = 30 THEN v_dname := 'Sales';
v_loc := 'Chicago';
WHEN v_deptno = 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