Oracle plsql语法混乱?

Gun*_*unj 0 sql oracle syntax plsql

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;
Run Code Online (Sandbox Code Playgroud)

对分号感到困惑。为什么在第一个代码中需要分号和结束情况;需要关键字。但在第二段代码中没有分号并且也只是结束;我知道在第二个中我正在为变量赋值,但那又怎样呢?

jar*_*rlh 6

case语句与 case表达式

case语句用于 PL/SQL 代码的条件执行

    case v_name
          when 'bruce' then DBMS_OUTPUT.PUT_LINE('corr');
          else DBMS_OUTPUT.PUT_LINE('incorrect');
    end case;
Run Code Online (Sandbox Code Playgroud)

case表达式可以在 PL/SQL 和常规 SQL 中使用,并返回一个值

    num := case v_name
           when 'bruce' then 2
           else 12
           end;
Run Code Online (Sandbox Code Playgroud)

  • 文档:[案例声明](https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/CASE-statement.html#GUID-F4251A23-0284-4990-A156-00A92F83BC35) vs [案例表达式](https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-language-fundamentals.html#GUID-216F1B33-493F-4CDE-93BB-096BACA8523E) (2认同)