89.Oracle数据库SQL开发之 修改表内存——数据库事务的保存点

119 阅读1分钟

89.Oracle数据库SQL开发之 修改表内存——保存点

欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…\

事务中的任何地方都可以设置一个保存点,这样可以将修改回滚到保存点处。如果有一个很大的事务,这将非常有用,因为这样如果在保存点后进行了误操作,并不需要将整个事务一直回滚到最开头。

执行如下:

store@PDB1> select product_id,price from productswhere product_id in ( 4,5);

 

PRODUCT_ID  PRICE

---------- ----------

          4     13.95

          5     49.99

将产品4的价格增加20%

如下:

store@PDB1> UPDATE products set price=price*1.20where product_id=4;

 

1 row updated.

设置一个保存点,命名为save1

store@PDB1> savepoint save1;

 

Savepoint created.

然后运行DML语句都可以回滚到这一保存点,而对产品4做的修改会保留。

继续执行如下UPDATE

store@PDB1> update products set price = price*1.30where product_id=5;

 

1 row updated.

 

查询:

store@PDB1> select product_id,price from productswhere product_id in (4,5);

 

PRODUCT_ID  PRICE

---------- ----------

          4     16.74

          5     64.99

然后将这个事务回滚到刚才设置的保存点处:

store@PDB1> rollback to savepoint save1;

 

Rollback complete.

继续查询如下:

store@PDB1> select product_id,price from productswhere product_id in ( 4,5 );

 

PRODUCT_ID  PRICE

---------- ----------

          4     16.74

          5     49.99

然后执行ROLLBACK语句取消整个事务:

store@PDB1> ROLLBACK;

 

Rollback complete.

继续查询如下:

store@PDB1> select product_id,price from productswhere product_id in ( 4,5 );

 

PRODUCT_ID  PRICE

---------- ----------

          4     13.95

          5     49.99

全部都回滚了。