关于commit

[复制链接]
查看11 | 回复7 | 2007-8-6 15:19:01 | 显示全部楼层 |阅读模式
前面的SQL语句,如:update什么之类,通过判断SQLCODE知道成功了,然后我commit提交,提交之后,我还需要判断SQLCODE来确定是否commit成功吗?
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
最初由 betterboy 发布
[B]前面的SQL语句,如:update什么之类,通过判断SQLCODE知道成功了,然后我commit提交,提交之后,我还需要判断SQLCODE来确定是否commit成功吗? [/B]

commit是针对事务处理的,update之后,事务还可以回滚的通过rollback,但commit之后,事务才算提交了。
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
现在讨论的就是commit命令会更改SQLCODE吗?如果更改,要不要通过SQLCODE判断commit是否成功,还是有其他方法,还是不用判断?这个主要是为commit提交时网络出现异常的讨论。
如:
lb_err = flase
update a set ……
if SQLCA.SQLCode0 then

lb_err = true
else

rollback ;

end if

update b set ……
if SQLCA.SQLCode0 then

lb_err = true
else

rollback ;

end if
if lb_err then

return err
else

commit ;

后续处理,比如删除操作系统下文件等//关键是commit发出之后要不要判断SQLCode?如果不判断,就认为提交成功,去删除文件,可是刚发出commit之后,还没有送到oracle数据库服务器,由于网络原因吊线了,我个人认为数据库肯定会回滚,但我们却认为成功了,删除了文件,这个文件还没有保存到数据库就丢了。

end if
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
现在讨论的就是commit命令会更改SQLCODE吗?如果更改,要不要通过SQLCODE判断commit是否成功,还是有其他方法,还是不用判断?这个主要是为commit提交时网络出现异常的讨论。
如:
lb_err = flase
update a set ……
if SQLCA.SQLCode0 then
lb_err = true
rollback ;
end if
update b set ……
if SQLCA.SQLCode0 then
lb_err = true
rollback ;
end if
if lb_err then
return err
else
commit ;
后续处理,比如删除操作系统下文件等 //关键是commit发出之后要不要判断SQLCode?如果不判断,就认为提交成功,去删除文件,可是刚发出commit之后,还没有送到oracle数据库服务器,由于网络原因吊线了,我个人认为数据库肯定会回滚,但我们却认为成功了,删除了文件,这个文件还没有保存到数据库就丢了。
end if
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
严谨的做法是要判断commit是否成功的.
一个理由是你提到的网络原因
还有一个是: 有些约束是到commit时才起作用的, 也就是说insert/update成功, 但commit有可能会失败.
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
还应该考虑是否存在分布事务
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
最初由 oldwain 发布
[B]严谨的做法是要判断commit是否成功的.
一个理由是你提到的网络原因
还有一个是: 有些约束是到commit时才起作用的, 也就是说insert/update成功, 但commit有可能会失败. [/B]

有意思,在深入讨论一下,如果commit之后,oracle服务器成功了,会返回一个成功状态,但就在这时,网络断了,客户端没接收到信息,请问数据库回滚吗?如果数据库不回滚,那我们客户端判断SQLCode确是失败的,又要重新处理一遍数据,岂不是导致数据重复存入数据库了?
回复

使用道具 举报

千问 | 2007-8-6 15:19:01 | 显示全部楼层
commit命令到底是如何来控制,使数据库和客户端一致的?我们有什么好的现成的方法没有?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行