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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

oracle 事务

發(fā)布時(shí)間:2025/1/21 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 事务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、事務(wù)概念
事務(wù)用于保證數(shù)據(jù)的一致性,它由一組相關(guān)的dml語(yǔ)句組成,該組的dml(數(shù)據(jù)操作語(yǔ)言,增刪改,沒(méi)有查詢)語(yǔ)句要么全部成功,要么全部失敗。

2.語(yǔ)法

begin

dml1

dml2

dml3;

commit;

rollback;

end;

eg:

?

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

執(zhí)行以下命令:

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

執(zhí)行結(jié)果:

執(zhí)行以下命令:

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

執(zhí)行結(jié)果:

?

執(zhí)行以下命令:

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

執(zhí)行結(jié)果:

執(zhí)行以下命令:

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

--3條dml中第3條錯(cuò)誤,違反檢查約束,不執(zhí)行rollback,執(zhí)行下行命令commit。注意在oracle事務(wù)中,當(dāng)執(zhí)行到錯(cuò)誤dml時(shí),之后的dml也就不會(huì)繼續(xù)執(zhí)行。

在oracle事務(wù)語(yǔ)句中必須要有begin和end,并且以end結(jié)尾,至于中間加入什么語(yǔ)句不影響該事務(wù)執(zhí)行。

?

3、exception 異常處理

???? 有兩種類(lèi)型的異常,一種為內(nèi)部異常,一種為用戶自定義異常,內(nèi)部異常是執(zhí)行期間返回到PL/SQL塊的ORACLE錯(cuò)誤或由PL/SQL代碼的某操作引起的錯(cuò)誤,如除數(shù)為零或內(nèi)存溢出的情況。用戶自定義異常由開(kāi)發(fā)者顯示定義,在PL/SQL塊中傳遞信息以控制對(duì)于應(yīng)用的錯(cuò)誤處理。

?? 常見(jiàn)的異常:

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

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

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

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

?

?

Oracle內(nèi)置函數(shù)SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來(lái)返回Oracle的錯(cuò)誤代碼和錯(cuò)誤消息。

OTHERS處理器應(yīng)該是異常處理塊中的最后的異常處理器,因?yàn)樗怯脕?lái)捕獲除了別的異常處理器處理以外的所有的Oracle異常,所以在程序的最外層使用一個(gè)OTHERS處理器的話,將可以確保所有的錯(cuò)誤都會(huì)被檢測(cè)到。

在一個(gè)內(nèi)在的異常中,SQLCODE返回Oracle錯(cuò)誤的序號(hào),而SQLERRM返回的是相應(yīng)的錯(cuò)誤消息,錯(cuò)誤消息首先顯示的是錯(cuò)誤代碼。

SQLCODE返回的是負(fù)數(shù),除非Oracle的錯(cuò)誤為“ORA-01403:NO DATA FOUND”(譯:ORA-01403:未找到數(shù)據(jù)),當(dāng)Oracle錯(cuò)誤為“ORA-01403:NO DATA FOUND”時(shí),其對(duì)應(yīng)的SQLCODE為+100。對(duì)于用戶自定義的異常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/dopaer/p/6379480.html

總結(jié)

以上是生活随笔為你收集整理的oracle 事务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。