Oracle CASE条件语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle CASE条件语句
从Oracle9i后,在PL/SQL中也可以像其他的编程语言一样使用CASE语句,CASE语句的执行方式与IF语句相似。
通常情况下,CASE语句从关键字CASE开始,后面跟着一个选择器,它通常是一个变量。
接下来是WHEN子句,它将根据选择器的值执行不同的PL/SQL语句。
CASE语句共有两种形式。
第一种形式是获取一个选择器值,然后将其与每个WHEN 子句进行比较。
其语法形式如下:
case <selector>
when <expression1> then pl/sql_statement1;
when <expression2> then pl/sql_statement2;
……
when < expressionN> then pl/sql_statement n;
[ else pl/sql_statement n+1;]
end;
另一种形式是不使用选择器,而是判断每个WHEN子句中的条件。
这种CASE语句的语法结构如下:
case
when expression 1 then pl/sql_statement1;
when expression 2 then pl/sql_statement2;
……
when expression N then pl/sql_statement n;
[ else pl/sql_statement n+1;]
end;
虽然CASE语句的作用与IF..ELSIF..ELSE..END IF语句相同,都可以实现多项选择,但是CASE语句可以以一种更简洁的表示法实现该功能。
当执行CASE语句时,系统将根据选择器的值查找与此相匹配的WHEN常量,当找到一个匹配的WHEN常量时,就会执行与该WHEN常量相关的子句。
如果没有与选择器相匹配的WHEN常量,那么就执行ELSE子句。
例如,下面的示例演示了CASE语句的使用:
SQL> set serveroutput on
SQL> declare
2 i number:=0;
3 begin
4 while i<
5 loop
5 case i
6 when 0 then
7 dbms_output.put_line('i is zero');
8 when 1 then
9 dbms_output.put_line('i is one');
10 when 2 then
11 dbms_output.put_line('i is two');
12 else
13 dbms_output.put_line('i is more than two');
14 end case;
15 i:=i+1;
16 end loop;
17 end;
18 /
i is zero
i is one
i is two
i is more than two
i is more than two
PL/SQL 过程已成功完成。
执行上面的程序块时,一共会执行5次循环,并且每次循环都是在查找与I匹配的WHEN 常量。
当选择器I大于2时,就没有与之匹配的WHEN语句了,因此会执行ELSE语句。
虽然在CASE语句中可以省略ELSE子句,但是当WHEN子句中的常量没有与选择器匹配的值时,则该CASE语句将引发一个如下的Oracle错误:
ORA-06592: 执行CASE 语句时未找到CASE
ORA-06512: 在line 5。