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块结构及简单的事务实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jdbc mysql 报错 ssl_My
- 下一篇: linux cmake编译源码,linu