Oracle 事務和異常處理

來源:互聯網
上載者:User

標籤: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 事務和異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.