2016-03-18 131 views
0

即時通訊新的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; 

----- CODE休息

回答

0

你不必使用 「每當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> WHENEVER SQLERROR EXIT SQL.SQLCODE

+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;