条件分支语句
• 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
逻辑表:

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到代码其它部分