如何插入记录并同时锁定该行?

时间:2010-07-19 15:16:15

标签: sql oracle plsql locking

我正在使用配置为使用自治事务的Oracle存储过程插入一行。我想插入此记录,提交该事务,然后锁定新插入的记录,以便除了当前会话之外没有其他人可以修改它(在另一个事务中,显然,因为插入它的是自治的)。 / p>

在我有机会SELECT...FOR UPDATE之前,如何确保没有其他人锁定此新记录?

使用Oracle 10g。

2 个答案:

答案 0 :(得分:10)

不,您永远不能在事务之间保持锁定。您应该问自己的问题是您需要在insertselect ... for update之间发出提交的原因。该行被insert锁定;如果您在提交之前完成了对该行所做的任何操作,那么您不必担心重新锁定该行。

答案 1 :(得分:2)

我的第一个偏好是在数据准备好供其他会话使用之前删除COMMIT。

或者,您可以设计应用程序,以确保新行仅被该事务锁定。

  1. 在表格中添加一个标记,例如VISIBLE,默认'N'

  2. 插入行时,请使用默认值插入。

  3. 提交后,select for update,并将标志更新为'Y'(这样当您的代码第二次提交时,它也将更新标志)。

  4. 修改您的应用,以便其他会话将忽略VISIBLE='N'的行。