標籤:bms replace sys exception integer 拋出異常 create 北京 編號
Oracle 的異常和復原
DECLARE dept_no NUMBER (2) := 70;BEGIN --開始事務 INSERT INTO dept VALUES (dept_no, ‘市場部‘, ‘北京‘); --插入部門記錄 INSERT INTO dept VALUES (dept_no, ‘後勤部‘, ‘上海‘); --插入相同編號的部門記錄 INSERT INTO emp --插入員工記錄 VALUES (7997, ‘威爾‘, ‘銷售人員‘, NULL, TRUNC (SYSDATE), 5000,300, dept_no); --提交事務 COMMIT;EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --捕足異常 DBMS_OUTPUT.PUT_LINE(SQLERRM); --顯示異常訊息 ROLLBACK; --復原異常
View Code
ollback會預設復原所有事務,savepoint可以儲存點,rollback可以復原到前一個點,減少資料重複操作。
DECLARE dept_no NUMBER (2) :=90;BEGIN --開始事務 SAVEPOINT A; INSERT INTO dept VALUES (dept_no, ‘市場部‘, ‘北京‘); --插入部門記錄 SAVEPOINT B; INSERT INTO emp --插入員工記錄 VALUES (7997, ‘威爾‘, ‘銷售人員‘, NULL, TRUNC (SYSDATE), 5000,300, dept_no); SAVEPOINT C; INSERT INTO dept VALUES (dept_no, ‘後勤部‘, ‘上海‘); --插入相同編號的部門記錄 --提交事務 COMMIT;EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --捕足異常 DBMS_OUTPUT.PUT_LINE(SQLERRM); --顯示異常訊息 ROLLBACK TO B; --復原異常END;
View Code
異常的處理格式
在plsql 塊中格式Declare 變數Begin 代碼塊 EXCEPTION when 異常的名稱 then 如生上面的異常時做的具體工作。End;
View Code
常用異常處理:
set serveroutput on;create or replace procedure pr12as--定義一個int變liangv_age integer;v_name varchar(30);begin v_age:=89;--通過select給v_name設定值--修改成過程select name into v_name from stud where id=1;DBMS_OUTPUT.PUT_LINE(‘沒有出錯‘);exception when value_error then SYS.DBMS_OUTPUT.PUT_LINE(‘數值錯誤‘); when no_data_found then SYS.DBMS_OUTPUT.PUT_LINE(‘沒有資料‘); when others then SYS.DBMS_OUTPUT.PUT_LINE(sqlcode||‘你出錯了‘||sqlerrm); end;exec pr12();-------------------------------------------自訂異常自己拋出異常//*定義一個自己的異常 myException Exception;拋出異常 RAISE myException; 處理自己的異常: Exception When myException then ....*/set serveroutput on;declaremyEx exception;beginDBMS_OUTPUT.PUT_LINE(‘這裡沒錯‘);raise myEx;DBMS_OUTPUT.PUT_LINE(‘不會輸出,前面拋出異常‘);--處理異常exceptionwhen myEx thenDBMS_OUTPUT.PUT_LINE(‘自己的異常‘||sqlcode||‘ ‘||sqlerrm);when others then DBMS_OUTPUT.PUT_LINE(‘不知知道什麼錯誤‘||sqlcode||sqlerrm);END;---出錯直接拋出declarebeginDBMS_OUTPUT.PUT_LINE(‘no errors‘);--直接拋出RAISE_APPLICATION_ERROR(-20000, ‘A‘);DBMS_OUTPUT.PUT_LINE(‘go okk....‘);exception when others thenDBMS_OUTPUT.PUT_LINE(sqlcode||‘ ‘||sqlerrm);end;
View Code
Oracle 事務和異常處理