CASE 语句 Oracle PL/SQL 示例
什么是 CASE 语句?
CASE 语句类似于 IF-THEN-ELSIF 语句,它根据条件从可用选项中选择一个替代方案。
- CASE 语句使用“选择器”而不是布尔表达式来选择序列。
- CASE 语句中表达式的值将被视为选择器。
- 表达式可以是任何类型(算术、变量等)
- 每个替代方案都分配有一个特定的预定义值(选择器),并且选择器值与条件表达式值匹配的替代方案将被执行。
- 与IF-THEN-ELSIF不同,CASE语句也可以在SQL语句中使用。
- CASE 语句中的 ELSE 块保存在未选择任何替代方案时需要执行的序列。
句法
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- 在上面的语法中,表达式将返回任意类型(变量、数字等)的值。
- 每个“WHEN”子句都被视为具有和。
- 将选择与表达式的值匹配的“WHEN”子句,并执行相应的将被执行。
- ‘ELSE’ 块是可选的,它保存当没有任何替代方案与表达式值匹配时需要执行。
- ‘END’标志CASE语句的结束,它是CASE的强制性部分。
例如1: 使用案例进行算术计算
在这个例子中,我们将对两个数字 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; /
代码说明
- 代码行 2:将变量“a”声明为“NUMBER”数据类型,并将其初始化为值“55”。
- 代码行 3:将变量“b”声明为“NUMBER”数据类型,并将其初始化为值“5”。
- 代码行 4:将变量“arth_operation”声明为大小为 2 的“VARCHAR20”数据类型,并使用值“MULTIPLY”对其进行初始化。
- 代码行6:打印语句“程序已启动”。
- 代码行 7:CASE 检查表达式的值。在本例中,变量“arth_operation”的值为“MULTIPLY”。现在,此值将被视为此 CASE 语句的选择器。
- 代码第 10 行:值为“MULTIPLY”的 WHEN 子句与选择器值匹配,因此控制器将选择此 action_block 并打印消息“数字的乘积为:275”。
- 代码行13:标志CASE语句的结束。
- 代码行14:打印语句“程序完成”。
代码输出
Program started. Multiplication of the numbers are: 275 Program completed.
已搜查案件声明
SEARCHED CASE 语句与 CASE 语句类似,但 SEARCHED CASE 不会使用选择器来选择替代方案,而是直接在 WHEN 子句中定义表达式。
- 第一个满足条件的 WHEN 子句将被执行,控制器将跳过其余的选项。
句法
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- 在上面的语法中,每个 WHEN 子句都有单独的和。
- 表达式返回 TRUE 的 WHEN 子句将被执行。
- ‘ELSE’ 块是可选的,它保存当所有替代方案都不满足时就需要执行。
- “END”标志 CASE 语句的结束,它是 CASE 的强制性部分。
例如1: 使用搜索案例进行算术计算
在这个例子中,我们将对两个数字 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; /
代码说明
- 代码行 2:将变量“a”声明为“NUMBER”数据类型,并将其初始化为值“55”。
- 代码行 3:将变量“b”声明为“NUMBER”数据类型,并用值“5”初始化它。
- 代码行 4:将变量“arth_operation”声明为大小为 2 的“VARCHAR20”数据类型,并使用值“DIVIDE”对其进行初始化。
- 代码行6:打印语句“程序已启动”。
- 代码第 7 行:SEARCHED CASE 语句开始。第 8 行到第 13 行的代码被跳过,因为它们的选择器值(ADD、SUBTRACT、MULTIPLY)与“arth_operation”的值不匹配。
- 代码第 14 行:WHEN 子句表达式“arth_operation = 'DIVIDE'”满足并且表达式返回 TRUE。
- 代码行15:将执行WHEN子句的Action_block,并打印消息“数字除法为:11”。
- 代码行17:标志CASE语句的结束。
- 代码第18行:打印语句“程序完成”。
代码输出
Program started. Division of the numbers are: 11 Program completed.
总结
型 | 商品描述 | 用法 |
---|---|---|
CASE | 像 IF-THEN-ELSIF 语句。使用“SELECTOR”来选择替代方案,而不是布尔表达式。 | 使用‘SELECTOR’从多个选项中进行选择 |
搜查案件 | CASE 语句没有实际的“SELECTOR”。相反,它包含将选择替代方案的实际条件(评估结果为 TRUE/FALSE)。 | 大多用于从两个以上的方案中进行选择。 |