任何人都可以建议,我们是否应该在打开之后和关闭游标之前使用提交?
答案 0 :(得分:10)
在大多数情况下这是无关紧要的。
游标是用于检索数据的构造。一旦读取了记录,在光标关闭的过程中,如果光标关闭,则无关紧要。
COMMIT应在事务完成时发出,而不是之前发出。
这两个动作的顺序很重要的一种情况是我们执行CURSOR FOR循环时。非常重要的是,任何COMMIT都应该在此循环之外发生,即在我们打开游标之前或关闭之后。否则我们可能会遇到读取一致性问题。有些人会争辩说,由于一些复杂的原因,他们必须在循环内部进行,但他们几乎总是错误的。
最后一个案例的重要性不应过高估计。大多数事务应该在PL / SQL游标中使用SQL而不是DML,因此它很少适用。
答案 1 :(得分:3)
如果游标使用FOR UPDATE锁定记录,则提交将释放所有锁。 (事实上,持有的任何锁都是由提交释放的。)
此外,由于“提交时提取”,您更有可能收到“ORA-01555快照太旧”错误 - 请参阅this AskTom thread。
答案 2 :(得分:1)
嗯,这取决于你想要完成的事情。有时候你想要这样做,有时你却不这样做。你能说明你想要完成什么吗?