立即终止脚本

时间:2016-03-18 12:14:01

标签: plsql

我是新的PL_SQL,我想问一个问题。当达到退出条件时需要终止此脚本,但是它失败了,它继续。当达到WHENEVER SQLERROR EXIT SQL.SQLCODE时,我无法终止脚本的执行。有什么建议??

 WHILE V_COUNT_MENSAJES>0 
     LOOP
     DELETE
     FROM TB_ICP_ENVIOMENSAJES
     WHERE KEY_MENSAJE = P_KEY_MENSAJE;
     WHENEVER SQLERROR EXIT SQL.SQLCODE;
     END LOOP;



END;
   WHEN others THEN
      dbms_output.put_line('Error en la consulta!');
  END;  

----- REST代码

2 个答案:

答案 0 :(得分:2)

  

尝试合并下面的代码片段,它将有助于终止   每当你遇到任何异常时代码。希望这会有所帮助。

DECLARE
  p_err_cd PLS_INTEGER;
  p_err_msg VARCHAR2(32767 CHAR);
  V_COUNT_MENSAJES PLS_INTEGER;
  P_KEY_MENSAJE VARCHAR2(1000 CHAR);
BEGIN
  WHILE V_COUNT_MENSAJES > 0
  LOOP
    BEGIN
      DELETE FROM TB_ICP_ENVIOMENSAJES WHERE KEY_MENSAJE = P_KEY_MENSAJE;
    EXCEPTION
    WHEN OTHERS THEN
      RAISE_APPLICATION_ERROR(-20001,SQLERRM,TRUE);
    END;
  END LOOP;
END;

答案 1 :(得分:0)

您不必使用" WHENEVER SQLERROR EXIT SQL.SQLCODE;" PLSQL块内部的代码。无论何时发生错误,控制都会传递给异常。请参阅下面的示例。

DECLARE
 V_COUNT_MENSAJES NUMBER:=10;
 ERROR_1 EXCEPTION;
  BEGIN
   WHILE V_COUNT_MENSAJES>0 
     LOOP
       RAISE ERROR_1;
     END LOOP;
 EXCEPTION
 WHEN others THEN
  dbms_output.put_line('Error en la consulta!');  
   END;
    /

另外请注意,当您执行脚本时,在许多情况下您希望错误导致SQL * Plus在我们使用以下命令而不是在plsql块内部终止: SQL> WHEREVER SQLERROR EXIT SQL.SQLCODE