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;