我是新的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代码
答案 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