Oracle PL/SQL 程序设计读书笔记 - 第4章 条件和顺序控制
Oracle PL/SQL 程序设计读书笔记 - 第4章 条件和顺序控制
4.1 IF语句
- IF THEN END IF;
这是IF语句最简单的用法。IF和THEN之间的条件决定了在THEN和END IF之间的一系列语句是否会被执行。如果条件部分的求值结果是FALSE或者NULL,这些代码就不会执行。
IF condition
THEN
....
END IF;
- IF THEN ELSE END IF;
这种组合形式的IF语句实现了二选一的逻辑。根据对位于IF和THEN两个关键字之间的条件的求值结果,或者是THEN和ELSE之间的代码被执行,或者是ELSE和END IF之间的代码被执行。总之,这两部分代码肯定有一个会被执行。
IF condition
THEN
... TRUE sequence of executable statements ...
ELSE
... FALSE/NULL sequence of executable statements ...
END IF;
- IF THEN ELSEIF ELSE END IF;
这是IF语句最后一个也是最复杂的使用形式。IF语句会从一系列互斥条件中选择一个是TRUE的,然后执行该条件关联的语句。如果是在Oracle 9i Database Release1之后的版本中使用这样的IF语句,你应该考虑使用CASE语句。
IF condition-1
THEN
statements-1
ELSEIF condition-N
THEN
statements-N
[ELSE
else_statements]
END IF;
4.1.4 避免IF语法的陷阱
- 一个IF总要有一个匹配的END IF
- 在关键字END和IF之间必须有空格
- 关键字ELSIF不要夹带"E"
- 只在关键字END IF后使用分号(;)
4.1.6 短路求值
PL/SQL使用短路求值方法,也就是说PL/SQL不需要对一个IF语句中的所有表达式都去求值。
4.2 CASE语句和表达式
- 简单的CASE语句
通过值来关联一个或者多个PL/SQL语句,根据表达式的返回值来选择哪一个语句被执行。
CASE expression
WHEN result1 THEN
statements1
WHEN result2 THEN
statements2
...
ELSE
statements_else
END CASE;
这个CASE语句明确地使用了ELSE子句,不过ELSE语句是可选的。如果你没有明确地指定自己的ELSE子句,PL/SQL会隐含地使用下面的方法:
ELSE
RAISE CASE_NOT_FOUND;
- 搜索形式的CASE语句
根据一系列布尔条件来确定要执行的PL/SQL语句系列。那些和第一个求值结果是TRUE的条件相关联的语句会被执行。
CASE
WHEN expression1 THEN
statements1
WHEN expression2 THEN
statements2
...
ELSE
statements_else
END CASE;
一旦某些语句被执行,整个执行也就结束了。即便有多个表达式求值结果都是TRUE,也只有和第一个表达式关联的语句会被执行。
ELSE语句是可选的,如果没有指定ELSE,并且没有一个表达式的求值结果是TRUE,就会抛出CASENOTFOUND异常
WHEN表达式是按照从上到下的顺序被依次求值。
4.2.4 CASE表达式
- 简单的CASE表达式
例如:
x:=
CASE expression
WHEN result1 THEN
result_expression1
WHEN result2 THEN
result_expression2
...
ELSE
result_expression_else
END;
- 搜索形式的CASE表达式
例如:
x:=
CASE
WHEN expression1 THEN
result_expression1
WHEN expression2 THEN
result_expression2
...
ELSE
result_expression_else
END;
4.3 GOTO语句
GOT语句的常见格式:
GOTO label_name
GOTO语句有一些限制需要注意
- 一个标签后面至少有跟着一个可执行语句
- GOTO语句的目标标签必须和GOTO语句在同一个作用域内
- GOTO语句的目标标签必须和GOTO语句在PL/SQL代码块的相同部分
4.4 NULL语句
NULL语句的语法格式如下:
NULL;