关于事务处理机制的两个基础问题
---关于事务处理机制的两个基础问题
请帮助判断下述观点是否正确,欢迎补充纠正及讨论!
1:在单独执行存储过程时,如没有定义begin transaction 及 commit transaction
如在中间执行出错异常,前面已处理的数据将不会rollbak,而在触发器中调用存储过程,
是将整个存储过程作为单独的事务处理,如在中间执行出错异常,整个存储过程将rollback,
上述观点是否正确!
2:关于多层游标嵌套的处理机制
如下所示,是一个在触发器中调用存储过程的简单示例
如在存储过程p_1的数据处理出现错误,
在错误处理中加上
rollback transaction
return
没有关闭的游标p1,p2是否会自动关闭,
而将程序返回到结束游标t1处,再执行数据处理t2
如不会,如果实现上述功能!
create trigger t on t_a
for update
as
数据处理t1
打开游标t1
exec p_1
结束游标t1
数据处理t2
......
create proc p_1
打开游标p1
打开游标p2
数据处理p1
结束游标p1
结束游标p2
问题点数:50、回复次数:5Top
1 楼winstar66()回复于 2004-12-05 21:46:42 得分 0
upTop
2 楼winstar66()回复于 2004-12-07 08:51:46 得分 0
upTop
3 楼winstar66()回复于 2004-12-08 08:48:47 得分 0
最后up一次Top
4 楼qzb0818(漂来漂去)回复于 2004-12-08 09:27:10 得分 5
没弄明白,帮你UPTop
5 楼lh1979(rocket)回复于 2004-12-08 09:56:28 得分 45
1,单独执行的存储过程如果用事务,如果设置了SET XACT_ABORT OFF(默认位on)如果中途发生错误则并不回滚,而是继续执行,
如果没有用事务,和批处理是一样的,提交执行直到发生错误,
触发器则是原子性的,发生错误回滚(默认为on的情况下)
2 当 SET CURSOR_CLOSE_ON_COMMIT 为 ON 时,ROLLBACK 语句关闭所有打开的游标。当 SET CURSOR_CLOSE_ON_COMMIT 为 OFF 时,ROLLBACK 语句将关闭所有打开的游标Top




