扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
使用savepoint sp_begintran就可以了
创新互联建站是一家专注于网站建设、成都网站制作与策划设计,崇阳网站建设哪家好?创新互联建站做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:崇阳等地区。崇阳做网站价格咨询:18980820575
如:
系列SQL或者DML语句;
savepoint sp_begintran; ---------设置回滚点
系列DML语句;
commit work;
这儿commit work;总是提交与其最近的回滚点
execute执行后
可以回滚
commit提交后
不可以回滚
其实oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的pl\sql也是要先点execute执行,执行后再点commit提交。
但是
commit提交后
可以用闪回查询恢复原来的数据
因为oracle会将近期的数据保存到快照中
如:
select
*
from
table_1
as
of
timestamp
to_timestamp('20080606
20:00:00','yyyymmdd
hh24:mi:ss');
这里'20080606
20:00:00'就是你想恢复数据到哪个时间状态
table_1是数据库的表名
这样查询到的数据就是执行更新操作之前的数据
execute执行后
可以回滚
commit提交后
不可以回滚
其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的PL\SQL也是要先点execute执行,执行后再点commit提交。
但是
commit提交后
可以用闪回查询恢复原来的数据
因为oracle会将近期的数据保存到快照中
如:
SELECT
*
FROM
TABLE_1
AS
OF
TIMESTAMP
TO_TIMESTAMP('20080606
20:00:00','YYYYMMDD
HH24:MI:SS');
这里'20080606
20:00:00'就是你想恢复数据到哪个时间状态
TABLE_1是数据库的表名
这样查询到的数据就是执行更新操作之前的数据
SQL和PL/SQL中Savepoint一事务范围内中间标志经常用于将一个长事务划分为小部分保留点Savepoint可标志长事务中任何点允许可回滚该点之后操作解决源代码中经常解决Savepoint;例如一过程包含几个函数每个函数前可建立一个保留点如果函数失败很容易返回到每一个函数开始情况回滚到一个Savepoint之后该Savepoint之后所获得数据封锁被释放为了处理方案部分回滚可以用带TO Savepoint子句ROLLBACK语句将事务回滚到指定位置
例
BEGIN
INSERT INTO ATM_LOG(whowhenwhatwhere)
VALUES ('Kiesha'SYSDATE'Withdrawal of $100''ATM54')
SAVEPOINT ATM_LOGGED;
UPDATE checking
SET balance=balance-100
RETURN balance INTO new_balance;
IF new_balance0
THEN
ROLLBACK TO ATM_LOGGED;
COMMIT
RAISE insufficient_funda;
END IF
END
关键字SAVEPOINT可选所以下面两个语句等价:
ROLLBACK TO ATM_LOGGED;
ROLLBACK TO SAVEPOINT ATM_LOGGED;
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流