Oracle 事務和異常處理
阿新 • • 發佈:2018-08-28
回滾 設置 插入 insert set others point exe str
Oracle 的異常和回滾
DECLARE dept_no NUMBER (2) := 70; BEGIN --開始事務 INSERT INTO dept VALUES (dept_no, ‘市場部‘, ‘北京‘); --插入部門記錄 INSERT INTO dept VALUES (dept_no, ‘後勤部‘, ‘上海‘); --插入相同編號的部門記錄 INSERT INTO emp --View Code插入員工記錄 VALUES (7997, ‘威爾‘, ‘銷售人員‘, NULL, TRUNC (SYSDATE), 5000,300, dept_no); --提交事務 COMMIT; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --捕足異常 DBMS_OUTPUT.PUT_LINE(SQLERRM); --顯示異常消息 ROLLBACK; --回滾異常
ollback會默認回滾所有事務,savepoint可以保存點,rollback可以回滾到前一個點,減少數據重復操作。
DECLARE dept_no NUMBER (2) :=90; BEGIN --開始事務 SAVEPOINT A; INSERT INTO dept VALUES (dept_no, ‘市場部‘, ‘北京‘); --插入部門記錄 SAVEPOINT B; INSERT INTO emp --View Code插入員工記錄 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;
異常的處理格式
在plsql 塊中格式 Declare 變量 Begin 代碼塊 EXCEPTION when 異常的名稱 then 如生上面的異常時做的具體工作。 End;View Code
常用異常處理:
set serveroutput on; create or replace procedure pr12 as --定義一個int變liang v_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; declare myEx exception; begin DBMS_OUTPUT.PUT_LINE(‘這裏沒錯‘); raise myEx; DBMS_OUTPUT.PUT_LINE(‘不會輸出,前面拋出異常‘); --處理異常 exception when myEx then DBMS_OUTPUT.PUT_LINE(‘自己的異常‘||sqlcode||‘ ‘||sqlerrm); when others then DBMS_OUTPUT.PUT_LINE(‘不知知道什麽錯誤‘||sqlcode||sqlerrm); END; ---出錯直接拋出 declare begin DBMS_OUTPUT.PUT_LINE(‘no errors‘); --直接拋出 RAISE_APPLICATION_ERROR(-20000, ‘A‘); DBMS_OUTPUT.PUT_LINE(‘go okk....‘); exception when others then DBMS_OUTPUT.PUT_LINE(sqlcode||‘ ‘||sqlerrm); end;View Code
Oracle 事務和異常處理