PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制

LuiseDalian發表於2014-03-17

事務處理和控制

事務是一個或多個SQL語句的序列,Oracle資料庫將它們看作是一個單元,或者所有語句都被執行,或者都不執行。

事務處理是Oracle資料庫的一個功能,允許多個使用者同時工作於資料庫上並確保每個使用者可以資料的一致版本,確保所有的改變可以以正確的順序被應用。

不同的使用者可以在不互相破壞他人資料和不互相協調的情況下向相同的資料結構寫入資料,因為Oracle資料庫會自動鎖住資料結構。為了最大化資料的可訪問性,Oracle資料庫以最短的時間鎖住最少的資料。

你幾乎不需要書寫額外的程式碼來避免多使用者同時訪問資料的問題。然而如果你需要這個層次上的控制,可以手動覆蓋預設的鎖機制。

commit語句

COMMIT語句結束當前的事務,使它的改變持久化並對其它使用者可見。

注意:事務可以跨多個塊,一個塊可以包含多個事務。

COMMIT語句的WRITE子句指定COMMIT操作產生的重做日誌的書寫優先權。

DROP TABLE accounts;

CREATE TABLE accounts

(

    account_id  NUMBER(6),

    balance     NUMBER (10,2)

);

 

INSERT INTO accounts (account_id, balance) VALUES (7715, 6350.00);

INSERT INTO accounts (account_id, balance) VALUES (7720, 5100.50);

--轉帳操作

CREATE OR REPLACE PROCEDURE transfer

(

    from_acct  NUMBER,

    to_acct    NUMBER,

    amount     NUMBER

) AUTHID DEFINER AS

BEGIN

    UPDATE accounts

    SET balance = balance - amount

    WHERE account_id = from_acct;

 

    UPDATE accounts

    SET balance = balance + amount

    WHERE account_id = to_acct;

 

    COMMIT WRITE IMMEDIATE NOWAIT;

END;

注意:對於非分散式事務,在COMMIT_LOGGINGCOMMIT_WAIT資料庫初始化引數沒有被設定的情況下,預設的PL/SQL提交操作是BATCH NOWAIT

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1122900/,如需轉載,請註明出處,否則將追究法律責任。

相關文章