CASE 语句 Oracle PL/SQL 示例
⚡ 智能摘要
PL/SQL CASE 语句根据选择器从多个选项中选择一个,类似于 IF-THEN-ELSIF 语句,但更清晰易懂。简单的 CASE 语句匹配选择器的值,而搜索式 CASE 语句会评估每个 WHEN 子句中的条件,并执行第一个为真的选项。

什么是 CASE 陈述?
CASE 语句类似于 IF-THEN-ELSIF 语句;它根据条件从可用选项中选择一个备选方案。
- CASE 语句使用“选择器”而不是布尔表达式来选择顺序。
- CASE 语句中表达式的值被视为选择器。
- 表达式可以是任何类型(算术表达式、变量表达式等)。
- 每个备选方案都被赋予一个预定义的值(选择器),选择器值与条件表达式值匹配的备选方案将被执行。
- 与IF-THEN-ELSIF不同,CASE语句也可以在SQL语句中使用。
- CASE 语句中的 ELSE 块包含当所有选项均未被选中时要执行的序列。
句法
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- 上述语法中,表达式返回的值可以是任何类型的。
- 每个“WHEN”子句都是一个具有以下条件的备选方案:以及。
- 选择值与表达式匹配的“WHEN”子句,并执行其已执行。
- 'ELSE' 代码块是可选的,用于存放以下内容:当没有其他匹配项时执行。
- 'END' 表示 CASE 语句的结束,是 CASE 语句的必要组成部分。
示例 1:使用 CASE 进行算术运算
在这个例子中,我们对两个数字 55 和 5 进行算术运算。
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'MULTIPLY'; BEGIN dbms_output.put_line('Program started.'); CASE (arth_operation) WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b ); WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b ); WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code 说明
- Code 第 2 行:将变量“a”声明为“NUMBER”,并将其初始化为值“55”。
- Code 第 3 行:将变量“b”声明为“NUMBER”,并将其初始化为值“5”。
- Code 第 4 行:将变量“arth_operation”声明为大小为 20 的“VARCHAR2”类型,并将其初始化为值“MULTIPLY”。
- Code 第 6 行:打印语句“程序已启动”。
- Code 第 7 行:CASE 语句检查表达式的值。这里,'arth_operation' 的值为 'MULTIPLY',它被视为选择器。
- Code 第 10 行:值为“MULTIPLY”的 WHEN 子句与选择器匹配,因此控制器选择此操作块并打印“数字的乘积为:275”。
- Code 第 13 行:标志着 CASE 语句的结束。
- Code 第 14 行:打印语句“程序完成”。
Code 输出
Program started. Multiplication of the numbers are: 275 Program completed.
已搜查案件声明
被搜索的 CASE 语句与 CASE 语句类似,但被搜索的 CASE 语句不是使用选择器来选择备选方案,而是直接在 WHEN 子句中定义条件。
- 第一个满足条件的 WHEN 子句将被执行,控制器将跳过其余选项。
句法
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- 在上述语法中,每个 WHEN 子句都有一个单独的和。
- 执行表达式返回 TRUE 的 WHEN 子句。
- 'ELSE' 代码块是可选的,用于存放以下内容:当所有其他替代方案均不满足时执行。
- 'END' 表示 CASE 语句的结束,是 CASE 语句的必要组成部分。
示例 1:使用搜索 CASE 进行算术计算
在这个例子中,我们对两个数字 55 和 5 进行算术运算。
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'DIVIDE'; BEGIN dbms_output.put_line('Program started.'); CASE WHEN arth_operation = 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '||a+b ); WHEN arth_operation = 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b); WHEN arth_operation = 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN arth_operation = 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are: '|| a/b ); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code 说明
- Code 第 2 行:将变量“a”声明为“NUMBER”,并将其初始化为值“55”。
- Code 第 3 行:将变量“b”声明为“NUMBER”,并将其初始化为值“5”。
- Code 第 4 行:将变量“arth_operation”声明为大小为 20 的“VARCHAR2”类型,并将其初始化为值“DIVIDE”。
- Code 第 6 行:打印语句“程序已启动”。
- Code 第 7 行:搜索的 CASE 语句开始。ADD、SUB 子句。TRACT 和 MULTIPLY 被跳过,因为它们的条件与“arth_operation”的值不匹配。
- Code 第 14 行:WHEN 子句表达式“arth_operation = 'DIVIDE'”得到满足,并返回 TRUE。
- Code 第 15 行:执行 WHEN 子句的操作块,并打印“数字的除法结果为:11”。
- Code 第 17 行:标志着 CASE 语句的结束。
- Code 第 18 行:打印语句“程序完成”。
Code 输出
Program started. Division of the numbers are: 11 Program completed.
案例与检索案例的比较
两种形式都选择一条分支,但它们在分支的选择方式上有所不同,如下所述。
| 类型 | 描述 | 用法 |
|---|---|---|
| 案例 | 类似于 IF-THEN-ELSIF 语句。“选择器”用于选择备选方案,而不是布尔表达式。 | 用于通过选择器从多个选项中进行选择。 |
| 搜查案件 | 这是一个没有实际选择器的 CASE 语句。它包含一个条件(该条件的计算结果为 TRUE 或 FALSE),用于选择备选方案。 | 用于从两个以上的选项中进行选择,通常有范围条件。 |
