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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

雖然之前寫了不少Oracle上的SQL語句,但是沒有抽出時間對Oracle進行一個系統的學習,實踐固然重要,但沒有一個理論上的規范學習與理解,在實踐中就不能舉一反三,就不能寫出高規范高質量的SQL語句。

-- PL/SQL 基本寫法

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

-- 博客記錄點滴 http://www.linuxidc.com?轉載注明出處

DECLARE -- 聲明變量

A INTEGER;-- 只聲明

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

C FLOAT;

BEGIN -- 可執行語句開始

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

A := 1.5;

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

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

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

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

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

EXCEPTION -- 異常處理

WHEN OTHERS THEN

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

END; -- 可執行語句結束

/ -- 該符號表示執行這段PL/SQL代碼

執行后的輸出:

開始執行可執行語句塊![http://blog.csdn.net/ls_man轉載注明出處]

A=2

B=0

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

我們再看一下如何通過異常處理實現數據庫事務:

-- PL/SQL 事務

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

-- 博客記錄點滴 http://www.linuxidc.com 轉載注明出處

-- 1.先創建一個測試表

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; -- 創建測試表

EXCEPTION

-- 如果表已存在,則會引發異常

WHEN OTHERS THEN

EXECUTE IMMEDIATE V_SQL_DROP_TABLE; -- 先刪除

EXECUTE IMMEDIATE V_SQL_CREATE_TABLE; -- 再創建

END;

/

--2.用我們剛創建的測試表進行測試

DECLARE

V_COUNT INTEGER; -- 表中記錄的行數

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

BEGIN

V_INT_VAL := 123456;

-- 插入一條正確的數據

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

-- 查詢條數為1條,我們發現插入成功了

SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;

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

-- 插入一條錯誤的數據,因為第二個字段為int型,插入字符數據肯定會出錯

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

-- 最后提交更改

COMMIT;

EXCEPTION

-- 異常處理

WHEN OTHERS THEN

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

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

-- 我們驗證一下表里的數據為0條

SELECT COUNT(*) INTO V_COUNT FROM MY_TEST;

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

END; -- 可執行語句結束

/ -- 該符號表示執行這段PL/SQL代碼

執行后的輸出:

MY_TEST表中有1條記錄

[PL/SQL 事務]中出現異常,錯誤代碼:ORA-1722

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

相關閱讀:

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

總結

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

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