You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle PL/SQL中CASE语句分号与END用法差异疑问

Oracle PL/SQL中CASE结构的分号使用差异

先看两段PL/SQL代码:

第一段代码:

declare
    v_name varchar2(10) := 'bruce';
    v_name2 number;

begin
        case v_name
              when 'bruce' then DBMS_OUTPUT.PUT_LINE('corr');
              else DBMS_OUTPUT.PUT_LINE('incorrect');
        end case;
        DBMS_OUTPUT.PUT_LINE(v_name2);
end;

第二段代码:

declare
    v_name varchar2(10) := 'bruce';
    num number(2) := 10;
begin
        num := case v_name
              when 'bruce' then 2
              else 12
        end;
        DBMS_OUTPUT.PUT_LINE(num);
end;

问题

为何第一段代码中需使用END CASE;结尾且分号不可省略,而第二段代码仅需END;结尾即可?已知第二段是对变量赋值,但仍不理解此语法差异的原因。

解答

这本质是CASE语句和CASE表达式的语法区别:

  • 第一段里的是CASE语句:它是一个独立的可执行语句,用来根据条件执行不同的PL/SQL操作(比如这里的DBMS_OUTPUT.PUT_LINE)。作为完整的语句,必须用END CASE;来闭合,分号是PL/SQL语句的结束标记,不能省略。
  • 第二段里的是CASE表达式:它不是独立语句,而是一个能返回值的表达式,作用是根据条件计算出一个结果值,用来给变量num赋值。表达式本身不需要CASE关键字闭合,只需要END来结束表达式,然后整个赋值语句(num := ...;)用分号收尾。

简单总结:

  • 当用CASE执行操作(调用过程、输出内容等),它是独立语句,必须写END CASE;
  • 当用CASE生成值(赋值、作为函数参数等),它是表达式,只需要写END,再跟着外层语句的分号

内容的提问来源于stack exchange,提问作者Guna Nikunj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:43:15