儲存過程異常捕獲繼續執行
set serveroutput on;
declare
V_SQL VARCHAR2(255);
errorCode number; --異常編碼
errorMsg varchar2(1000); --異常資訊
out_return varchar2(1000);
flag varchar2(10);
CURSOR TP IS
SELECT TABLE_NAME,CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'P';
begin
FOR E IN TP LOOP
BEGIN
V_SQL := 'ALTER TABLE ' || E.TABLE_NAME || ' ' || 'DISABLE' ||' '|| 'CONSTRAINT ' || E.CONSTRAINT_NAME;
DBMS_OUTPUT.PUT_LINE(V_SQL);
EXECUTE IMMEDIATE (V_SQL);
EXCEPTION
when others then
errorCode := SQLCODE;
errorMsg := SUBSTR(SQLERRM, 1, 200);
flag := 'false';
out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;
dbms_output.put_line(out_return);
null;
END;
END LOOP;
end;
注意問題
1、捕捉異常後繼續下一次迴圈需用
EXCEPTION
when others then null;
這樣的結構。
2、在for ...LOOP ENDLOOP 迴圈中捕捉異常,必須用begin end 包起來,否則會報錯。在PLSQL中報
PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following
Error: PLS-00103: Encountered the symbol "END" when expecting one of the following
正確
FOR E IN TP LOOP
begin
......................
EXCEPTION
when others then null;
end;
endloop;
錯誤用法:
FOR E IN TP LOOP
......................
EXCEPTION
when others then null;
endloop;