1、条件分支语句
在Oracle9i之前,执行条件分支操作都需要使用IF语句来完成,并且PL/SQL中,提供了三种条件分支语句:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF.具体的语法如下:
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements ;]
END IF;
注意:ELSIF 是一个单词, END IF 是两个单词 .
下面分别用代码来示例这三种条件的判断:
1.1 简单条件判断 :
如上图所示,当使用简单条件判断时,如果condition 为TRUE,那么PL/SQL执行器会执行THEN后的操作;如果conditon为FALSE或NULL,那么PL/SQL执行器会直接退出条件分支语句。示例如下:
DECLARE
v_sal NUMBER(6,2);
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE lower(ename)=lower('&name');
IF v_sal<2000 THEN
UPDATE emp SET sal=v_sal+200
WHERE lower(ename)=lower('&name');
END IF;
END;
1.2二重条件分支
示例如下:
DECLARE
v_comm number(6,2);
BEGIN
SELECT comm INTO v_comm
FROM emp
where empno=&no;
IF v_comm<>0 THEN
UPDATE emp set comm=v_comm+100
where empno=&no;
ELSE
UPDATE emp set comm=200
where empno=&no;
END IF;
END;
1.3多重条件分支
示例如下:
DECLARE
v_job VARCHAR2(10);
v_sal NUMBER(6,2);
BEGIN
SELECT job,sal INTO v_job,v_sal
FROM emp
WHERE empno=&no;
IF v_job='PRESIDENT' THEN
UPDATE emp SET sal=v_sal+1000 where empno=&no;
ELSIF v_job='MANAGER' THEN
UPDATE emp SET sal=v_sal+500 where empno=&no;
ELSE
UPDATE emp SET sal=v_sal+200 where empno=&no;
END IF;
END;
2.CASE 语句
从Oracle 9i 开始,不仅可以使用IF语句执行多重条件分支操作,也可以使用CASE语句执行多重条件分支操作。当处理多重条件分支时,使用CASE语句更加敏捷而且执行效率更好,所以建议大家使用CASE语句。使用CASE语句执行多重条件分支时,有两种方法,第一种方法是使用单一选择符进行等值比较;第二种方法是使用多种条件进行非等值比较。
2.1 在 CASE语句中使用单一选择符进行等值比较
当使用CASE语句执行多重条件分支时,如果条件选择符完全相同,并且条件表达式为相等条件选择,那么可以选择进行单一条件选择符进行等值比较。语法如下:
CASE selector
WHEN expression1 THEN sequence_of_statements1;
WHEN expression2 THEN sequence_of_statements1;
...
WHEN expressionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;
字段说明:selectotor 用于指定条件选择符;
expression 用于指定条件表达式;
sequence_of_statements 用于指定要执行的条件操作;
如果设置的所有条件都不满足,则会执行ELSE后的语句;注意:为了避免CASE_NOT_FOUND例外,在编写CASE语句时,应该带有ELSE子句。示例如下:
DECLARE
v_deptno emp.deptno%TYPE;
BEGIN
v_deptno:=&no;
CASE v_deptno
WHEN 10 THEN
UPDATE emp SET comm=100 WHERE deptno=v_deptno;
WHEN 20 THEN
UPDATE emp SET comm=200 WHERE deptno=v_deptno;
WHEN 30 THEN
UPDATE emp SET comm=300 WHERE deptno=v_deptno;
ELSE
dbms_output.put_line('不存在该部门');
END CASE;
END;
2.2 在CASE语句中使用多种条件比较
当使用单一条件选择符进行等值比较时,可以使用CASE selector 语法来实现。如果包含有多种条件进行不等值比较,那么必须在WHEN子句中指定比较条件。语法如下:
CASE
WHEN search_condition1 THEN sequence_of_statements1;
WHEN search_condition2 THEN sequence_of_statements2;
...
WHEN search_conditionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;
字段说明:serach_condition 用于指定不同的比较条件
sequence_of_statemets 用于指定满足特定条件时要指定的操作
示例如下:
DECLARE
v_sal emp.sal%TYPE;
v_ename emp.ename%TYPE;
BEGIN
SELECT sal,ename INTO v_sal,v_ename
FROM emp
WHERE
empno=&no;
CASE
WHEN v_sal <1000 THEN
UPDATE emp SET comm=100 WHERE ename =v_ename;
WHEN v_sal<2000 THEN
UPDATE emp SET comm=200 WHERE ename=v_ename;
WHEN v_sal<6000 THEN
UPDATE emp SET comm=400 WHERE ename=v_ename;
END CASE;
END;