【问题标题】:case in oracle procedure [closed]oracle程序中的案例[关闭]
【发布时间】:2014-01-03 17:27:58
【问题描述】:

下面代码中CASE的用法有错吗? 我收到一个错误:

“PLS-00103:遇到符号“;”时期待其中之一 以下:

case 符号“case”被替换为“;”接着说。 "

代码是:

create or replace PROCEDURE MIK_3PL_ITEM_ERRORS_PROC_1 IS 
  i_error_code varchar2(5);
  i_desc       varchar2(200);
  CURSOR c_3pl_error IS
    SELECT mie.client_item_id, mie.message_id, 
           mie.error_desc, mis.process_flag
      FROM mik_3pl_item_error_etl mie, 
           dummy_staging mis
     WHERE mie.client_item_id = mis.client_item_id
       AND mie.message_id = mis.message_id;
BEGIN
  dbms_output.put_line ('hello');
  for i in c_3pl_error
  loop
    dbms_output.put_line ('in loop');
    DECLARE
      -- L_relations_exist VARCHAR2(1);
      L_error_message   VARCHAR2(255) := NULL;
      L_return          BOOLEAN       := FALSE;
    BEGIN
      select error_code
        into i_error_code
        from mik_3pl_error_desc
       where description = i.error_desc;
      -- dbms_output.put_line(i_error_code);  
      CASE i_error_code
         WHEN  'E2'  THEN dbms_output.put_line ('in case');
      END;  -- end of CASE */
    END; /*End of begin */
  end loop;
END MIK_3PL_ITEM_ERRORS_PROC_1;

【问题讨论】:

  • 您应该以end case; 结束case 语句,而不仅仅是end;
  • 这个问题似乎是题外话,因为它是关于语法错误的。

标签: oracle plsql case procedure


【解决方案1】:

必须是:

    ...
      CASE i_error_code
         WHEN  'E2'  THEN dbms_output.put_line ('in case');
      END CASE;  -- end of CASE */
    END;

它试图将END; 视为块的结尾——将ENDBEGIN 匹配——它知道case 仍然打开。

documentation for the CASE statement 表明了这一点。 (不要与 CASE expression 混淆,后者只有 END。咳咳。谢谢 Nicholas!)

【讨论】:

  • 啊!确实是语法错误!我的错。谢谢亚历克斯和尼古拉斯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多