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)。 大多用于从两个以上的方案中进行选择。