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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 事务块 sql_Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现

發(fā)布時間:2024/9/27 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 事务块 sql_Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

雖然之前寫了不少Oracle上的SQL語句,但是沒有抽出時間對Oracle進(jìn)行一個系統(tǒng)的學(xué)習(xí),實(shí)踐固然重要,但沒有一個理論上的規(guī)范學(xué)習(xí)與理解,在實(shí)踐中就不能舉一反三,就不能寫出高規(guī)范高質(zhì)量的SQL語句。

-- PL/SQL 基本寫法

-- 說明:聲明、異常處理部分為可選,視具體程序而定

-- 博客記錄點(diǎn)滴 http://www.linuxidc.com?轉(zhuǎn)載注明出處

DECLARE -- 聲明變量

A INTEGER;-- 只聲明

B FLOAT := 0;-- 帶賦值的聲明

C FLOAT;

BEGIN -- 可執(zhí)行語句開始

DBMS_OUTPUT.put_line('開始執(zhí)行可執(zhí)行語句塊![http://www.linuxidc.com轉(zhuǎn)載注明出處]');

A := 1.5;

DBMS_OUTPUT.put_line('A=' || A);

DBMS_OUTPUT.put_line('B=' || B);

C := A / B; -- 會引發(fā)分母為0的異常,下面的兩條輸出語句將無法執(zhí)行

DBMS_OUTPUT.put_line('C=' || C);

DBMS_OUTPUT.put_line('可執(zhí)行語句塊執(zhí)行完畢![http://www.linuxidc.com轉(zhuǎn)載注明出處]');

EXCEPTION -- 異常處理

WHEN OTHERS THEN

DBMS_OUTPUT.put_line('[PL/SQL 基本寫法]中出現(xiàn)異常,錯誤代碼:ORA'||sqlcode);

END; -- 可執(zhí)行語句結(jié)束

/ -- 該符號表示執(zhí)行這段PL/SQL代碼

執(zhí)行后的輸出:

開始執(zhí)行可執(zhí)行語句塊![http://blog.csdn.net/ls_man轉(zhuǎn)載注明出處]

A=2

B=0

[PL/SQL 基本寫法]中出現(xiàn)異常,錯誤代碼:ORA-1476

我們再看一下如何通過異常處理實(shí)現(xiàn)數(shù)據(jù)庫事務(wù):

-- PL/SQL 事務(wù)

-- 說明:有多條修改數(shù)據(jù)的語句執(zhí)行,如果其中某條出錯,之前的更改也不會記入數(shù)據(jù)庫

-- 博客記錄點(diǎn)滴 http://www.linuxidc.com 轉(zhuǎn)載注明出處

-- 1.先創(chuàng)建一個測試表

DECLARE

V_SQL_DROP_TABLE? VARCHAR2(50) := 'DROP TABLE MY_TEST';

V_SQL_CREATE_TABLE VARCHAR2(100) := 'CREATE TABLE MY_TEST(NOT_NULL VARCHAR2(20) NOT NULL, ONLY_INT INTEGER)';

BEGIN

EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 創(chuàng)建測試表

EXCEPTION

-- 如果表已存在,則會引發(fā)異常

WHEN OTHERS THEN

EXECUTE IMMEDIATE V_SQL_DROP_TABLE; -- 先刪除

EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 再創(chuàng)建

END;

/

--2.用我們剛創(chuàng)建的測試表進(jìn)行測試

DECLARE

V_COUNT INTEGER; -- 表中記錄的行數(shù)

V_INT_VAL MY_TEST.ONLY_INT%TYPE; -- 使用%TYPE關(guān)鍵字參照某表某字段類型聲明變量

BEGIN

V_INT_VAL := 123456;

-- 插入一條正確的數(shù)據(jù)

INSERT INTO MY_TEST VALUES ('TEST_SUCCESS', V_INT_VAL);

-- 查詢條數(shù)為1條,我們發(fā)現(xiàn)插入成功了

SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;

DBMS_OUTPUT.put_line('MY_TEST表中有' || V_COUNT || '條記錄');

-- 插入一條錯誤的數(shù)據(jù),因?yàn)榈诙€字段為int型,插入字符數(shù)據(jù)肯定會出錯

INSERT INTO MY_TEST VALUES ('TEST_FAIL', 'ABC');

-- 最后提交更改

COMMIT;

EXCEPTION

-- 異常處理

WHEN OTHERS THEN

ROLLBACK; -- 異常時回滾,這樣第一次插入的正確數(shù)據(jù)也不會保存到數(shù)據(jù)庫

DBMS_OUTPUT.put_line('[PL/SQL 事務(wù)]中出現(xiàn)異常,錯誤代碼:ORA' || sqlcode);

-- 我們驗(yàn)證一下表里的數(shù)據(jù)為0條

SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;

DBMS_OUTPUT.put_line('回滾后,MY_TEST表中有' || V_COUNT || '條記錄');

END; -- 可執(zhí)行語句結(jié)束

/ -- 該符號表示執(zhí)行這段PL/SQL代碼

執(zhí)行后的輸出:

MY_TEST表中有1條記錄

[PL/SQL 事務(wù)]中出現(xiàn)異常,錯誤代碼:ORA-1722

回滾后,MY_TEST表中有0條記錄

相關(guān)閱讀:

在64位Win7系統(tǒng)下安裝Oracle 11g和Oracle SQL Developer客戶端 http://www.linuxidc.com/Linux/2012-11/74809.htm

總結(jié)

以上是生活随笔為你收集整理的mysql 事务块 sql_Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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