codecamp

PL / SQL事务

数据库事务工作的基本单位,可能会由一个或多个相关的SQL语句。这就是所谓的原子弹,因为数据库修改所带来的构成一个事务中的SQL语句可以共同被提交,即成为永久性的数据库或轧制从数据库返回的(撤消)。

一个成功执行的SQL语句和提交的事务都不一样。即使成功执行SQL语句,除非包含该语句的事务被提交,它可以回滚,并使用statement(s)的所有修改都可以撤销。

启动一个结束交易

事务有开始结束 。当下列事件之一发生事务开始:

  • 第一个SQL语句连接到数据库后执行。

  • 在交易后发出的每个新的SQL语句完成。

当下列事件之一发生事务结束:

  • COMMIT或ROLLBACK语句发出。

  • DDL语句,如CREATE TABLE语句,已发出;因为在这种情况下,一个将自动执行COMMIT。

  • 一个DCL语句,例如GRANT语句,已发出;因为在这种情况下,一个将自动执行COMMIT。

  • 用户从数据库中断开。

  • 从SQL * Plus用户退出通过发出EXIT指令中,提交自动执行。

  • 在SQL * Plus异常终止,自动执行ROLLBACK。

  • 一个DML语句失败;在这种情况下一个ROLLBACK对于撤销该DML语句自动执行。

提交事务

事务是通过发出SQL命令COMMIT永久。为COMMIT命令的一般语法是:

COMMIT;

例如,

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
COMMIT;

回滚事务

没有提交到数据库所做的更改可以使用ROLLBACK命令撤消。

为ROLLBACK命令的一般语法是:

ROLLBACK [TO SAVEPOINT < savepoint_name>];

当一个事务因中止一些前所未有的情况,如系统故障,则整个事务,因为提交自动回退。如果您不使用保存点 ,然后只需使用下面的语句来回滚所有的变化:

ROLLBACK;

保存点

保存点是排序的标记,通过设置一些关卡拆分长事务分成更小的单位帮助。由一个长事务中保存点的设置,你可以根据需要回滚到一个检查点。这是通过发出SAVEPOINT命令来完成。

对于SAVEPOINT命令的一般语法是:

SAVEPOINT < savepoint_name >;

例如:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
SAVEPOINT sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000;
ROLLBACK TO sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 7;
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 8;
COMMIT;

在这里,ROLLBACK TO sav1;声明回滚变化到这一点,在那里你标志着保存点sav1和新的变化后,将启动。

自动事务控制

要执行一个自动执行COMMIT每当一个INSERT,UPDATE或DELETE命令执行,你可以设置AUTOCOMMIT环境变量:

SET AUTOCOMMIT ON;

您可以关闭自动使用以下命令提交方式:

SET AUTOCOMMIT OFF;

PL / SQL字符串
PL / SQL数组
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }