在oracle程序中的情况

时间:2014-01-03 17:27:58

标签: oracle plsql case procedure

以下代码中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;

1 个答案:

答案 0 :(得分: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表明了这一点。 (不要与只有END的{​​{3}}混淆。嗯。谢谢Nicholas!)