事务是一个或多个SQL语句的序列,Oracle数据库将它们看作是一个单元,或者所有语句都被执行,或者都不执行。
事务处理是Oracle数据库的一个功能,允许多个用户同时工作于数据库上并确保每个用户可以数据的一致版本,确保所有的改变可以以正确的顺序被应用。
不同的用户可以在不互相破坏他人数据和不互相协调的情况下向相同的数据结构写入数据,因为Oracle数据库会自动锁住数据结构。为了最大化数据的可访问性,Oracle数据库以最短的时间锁住最少的数据。
你几乎不需要书写额外的代码来避免多用户同时访问数据的问题。然而如果你需要这个层次上的控制,可以手动覆盖默认的锁机制。
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_LOGGING和COMMIT_WAIT数据库初始化参数没有被设置的情况下,默认的PL/SQL提交操作是BATCH NOWAIT。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1122900/ ,如需转载,请注明出处,否则将追究法律责任。