条件分支语句
• IF 语句:
–IF-THEN-END IF
–IF-THEN-ELSE-END IF
–IF-THEN-ELSIF-END IF
–case语句:
•循环语句
–loop
语法:
IF condition THEN
statements;
[ELSIF condition
THEN statements;]
[ELSE statements;]
END IF;
condition 是一个布尔变量或表达式 (值为TRUE, FALSE或NULL) (仅当表达式为TRUE时执行
THEN 之后的语句)。
THEN 是一个子句,与前面的布尔表达式相联系。
statements 是 若干个PL/SQL 或 SQL 语句 (语句中可能还有嵌套的IF 语句)。
ELSIF 这个关键字将引入一个布尔表达式 (如果第一个条件结果为FALSE或NULL,ELSEIF 关键
字将引出附加的选择条件) 。
ELSE 如果IF条件不成立则执行ELSE关键字后面的语句。
NULL的处理
DECLARE • x number(2):= 5; y number(2):= NULL; BEGIN IF x != y THEN dbms_output.put_line(100); ELSE dbms_output.put_line(200); END IF; END;
任何包含空值的算术表达式结果均为空值。
仅当变量值为NULL时,IS NULL 的返回值是 TRUE 。
可把空变量当作空字符串来连接表达式。
DECLARE x number(2):=null; y number(2):=null; begin if x!=y then dbms_output.put_line(100); else dbms_output.put_line(200); end if; end; DECLARE x number(2):=null; y number(2):=null; begin if x=y then dbms_output.put_line(100); else dbms_output.put_line(200); end if; end;
都输出200
任何包含空值的算术表达式结果均为空值。
仅当变量值为NULL时,IS NULL 的返回值是 TRUE 。
可把空变量当作空字符串来连接表达式。
DECLARE x number(2):=null; y number(2):=null; begin if x!=y then dbms_output.put_line(100); else dbms_output.put_line(200); end if; end; DECLARE x number(2):=null; y number(2):=null; begin if x=y then dbms_output.put_line(100); else dbms_output.put_line(200); end if; end;
都输出200
DECLARE x number(2):=5; y number(2):=null; begin if nvl(x,0)!=nvl(y,0) then dbms_output.put_line(100); else dbms_output.put_line(200); end if; end;
输出100
输出100
逻辑表:
![](http://hi.csdn.net/attachment/201203/22/0_1332430560m6wu.gif)
CASE语句
语法:
CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2... WHEN expressionN THEN resultN [ELSE resultN+1;] END; DECLARE v_var varchar2(10); v_deptno emp.deptno%type; BEGIN SELECT deptno into v_deptno from emp where sal=(select max(sal) from emp); v_var:= case v_deptno when 10 then '部门1' when 20 then '部门2' else '部门3' END; dbms_output.put_line(v_var); END;
循环控制 : LOOP 语句
循环控制 : LOOP 语句
•
LOOP 语句有三种形式:
–
Basic loop 无条件的循环
–
FOR loop 有计数的循环
–
WHILE loop 有条件的循环
–
–
EXIT 是强制结束循环的语句
无条件循环的特点是循环体至少执行一次
LOOP statement1; . . . EXIT [WHEN condition]; END LOOP;
FOR LOOP:
FOR loop的结构大致与 Basic Loop相同。只是, FOR loop语句的前端有一个控制语句,这个控制语句来决定PL/SQL执行循环的次数
FOR counter in [REVERSE] lower_bound..upper_bound LOOP statement1; statement2; . . . END LOOP;
WHILE LOOP:
WHILE LOOP:
WHILE condition LOOP statement1; statement2; . . . END LOOP;WHILE loop 是在条件为真的情况下循环执行一系列语句。 WHILE loop 循环是在执行一系列语句之前判断条件即先判断后执行。当条件为假时结束循环。如果一开始条件就为假,则一次也不执行这些代码。
附注:如果条件为NULL,循环终止,控制跳到下一个语句。
附注:如果条件为NULL,循环终止,控制跳到下一个语句。
GOTO语句:
BEGIN dbms_output.put_line(1); GOTO l_last_line; dbms_output.put_line(2); return; <<l_last_line>> dbms_output.put_line(3); END;•不能GOTO到嵌套块内部的标签
•IF子句外部执行的语句,不能GOTO到IF子句内部的标签
•IF子句内部执行的语句,不能GOTO到另一个IF子句内部的标签
•不能从异常处理部分GOTO到代码其它部分
•IF子句外部执行的语句,不能GOTO到IF子句内部的标签
•IF子句内部执行的语句,不能GOTO到另一个IF子句内部的标签
•不能从异常处理部分GOTO到代码其它部分