89.Oracle数据库SQL开发之 修改表内存——保存点
事务中的任何地方都可以设置一个保存点,这样可以将修改回滚到保存点处。如果有一个很大的事务,这将非常有用,因为这样如果在保存点后进行了误操作,并不需要将整个事务一直回滚到最开头。
执行如下:
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
全部都回滚了。