日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 事务

發布時間:2025/1/21 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、事務概念
事務用于保證數據的一致性,它由一組相關的dml語句組成,該組的dml(數據操作語言,增刪改,沒有查詢)語句要么全部成功,要么全部失敗。

2.語法

begin

dml1

dml2

dml3;

commit;

rollback;

end;

eg:

?

約束:alter table student
add constraint ck_student_stuage check(stuage>16 and stuage<40);

執行以下命令:

begin
insert into student values('201701001','金允誠','男',23,'電子競技','競技1班',to_date('2002/8/27','yyyy/mm/dd'));
insert into student values('201701002','金允','男',10,'電子競技','競技2班',to_date('2002/9/27','yyyy/mm/dd'));
insert into student values('201701003','金誠','男',29,'電子競技','競技3班',to_date('2002/10/27','yyyy/mm/dd'));
commit;
exception
when others then
rollback;
dbms_output.put_line('錯誤信息:'|| sqlerrm);
end;

執行結果:

執行以下命令:

begin
insert into student values('201701001','金允誠','男',23,'電子競技','競技1班',to_date('2002/8/27','yyyy/mm/dd'));
insert into student values('201701002','金允','男',20,'電子競技','競技2班',to_date('2002/9/27','yyyy/mm/dd'));
insert into student values('201701003','金誠','男',29,'電子競技','競技3班',to_date('2002/10/27','yyyy/mm/dd'));
commit;
exception
when others then
rollback;
dbms_output.put_line('錯誤信息:'|| sqlerrm);
end;

執行結果:

?

執行以下命令:

begin
insert into student values('201701011','金允誠','男',23,'電子競技','競技1班',to_date('2002/8/27','yyyy/mm/dd'));
insert into student values('201701012','金允','男',20,'電子競技','競技2班',to_date('2002/9/27','yyyy/mm/dd'));
insert into student values('201701013','金誠','男',29,'電子競技','競技3班',to_date('2002/10/27','yyyy/mm/dd'));
rollback;
exception
when others then
commit;
dbms_output.put_line('錯誤信息:'|| sqlerrm);
end;

執行結果:

執行以下命令:

begin
insert into student values('201701011','金允誠','男',23,'電子競技','競技1班',to_date('2002/8/27','yyyy/mm/dd'));
insert into student values('201701012','金允','男',20,'電子競技','競技2班',to_date('2002/9/27','yyyy/mm/dd'));
insert into student values('201701013','金誠','男',9,'電子競技','競技3班',to_date('2002/10/27','yyyy/mm/dd'));
rollback;
exception
when others then
commit;
dbms_output.put_line('錯誤信息:'|| sqlerrm);
end;

--3條dml中第3條錯誤,違反檢查約束,不執行rollback,執行下行命令commit。注意在oracle事務中,當執行到錯誤dml時,之后的dml也就不會繼續執行。

在oracle事務語句中必須要有begin和end,并且以end結尾,至于中間加入什么語句不影響該事務執行。

?

3、exception 異常處理

???? 有兩種類型的異常,一種為內部異常,一種為用戶自定義異常,內部異常是執行期間返回到PL/SQL塊的ORACLE錯誤或由PL/SQL代碼的某操作引起的錯誤,如除數為零或內存溢出的情況。用戶自定義異常由開發者顯示定義,在PL/SQL塊中傳遞信息以控制對于應用的錯誤處理。

?? 常見的異常:

no_data_found             ?? ?? ora-01403  +100  select into 語句沒有符合條件的記錄返回
too_many_rows ? ora-01422  -1422  ? ? select into 語句符合條件的記錄有多條返回
dup_val_on_index  ora-00001  -1 ???? ? 對于數據庫表中的某一列,該列已經被限制為唯一索引,程序試圖存儲兩個重復的值
value_error  ora-06502  -6502 ????????? 在轉換字符類型,截取或長度受限時,會發生該異常,如一個字符分配給一個變量,而該變量聲明的長度比該字符短,就會引發該異常
storage_error  ora-06500  -6500  ? ? 內存溢出
zero_divide  ora-01476  -1476 ????? 除數為零
case_not_found  ora-06592  -6530 ? 對于選擇case語句,沒有與之相匹配的條件,同時,也沒有else語句捕獲其他的條件
cursor_already_open  ora-06511  -6511  程序試圖打開一個已經打開的游標
timeout_on_resource  ora-00051  -51  ? ? ? 系統在等待某一資源,時間超時

如果要處理未命名的內部異常,必須使用OTHERS異常處理器

一般在begin之前加declare聲明語句,聲明異常名

用DBMS_output.putline('聲明的異常名:'|| sqlcode or sqlerrm)? 可以在sql窗口下的輸出窗口找到報錯信息。

?

?

Oracle內置函數SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯誤代碼和錯誤消息。

OTHERS處理器應該是異常處理塊中的最后的異常處理器,因為它是用來捕獲除了別的異常處理器處理以外的所有的Oracle異常,所以在程序的最外層使用一個OTHERS處理器的話,將可以確保所有的錯誤都會被檢測到。

在一個內在的異常中,SQLCODE返回Oracle錯誤的序號,而SQLERRM返回的是相應的錯誤消息,錯誤消息首先顯示的是錯誤代碼。

SQLCODE返回的是負數,除非Oracle的錯誤為“ORA-01403:NO DATA FOUND”(譯:ORA-01403:未找到數據),當Oracle錯誤為“ORA-01403:NO DATA FOUND”時,其對應的SQLCODE為+100。對于用戶自定義的異常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception

如果沒有異常被觸發,則SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。(轉自http://blog.csdn.net/azkaser/article/details/4925084)

?

轉載于:https://www.cnblogs.com/dopaer/p/6379480.html

總結

以上是生活随笔為你收集整理的oracle 事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。