Stored procedures 如果使用FOR UPDATE子句,如何解锁行

Stored procedures 如果使用FOR UPDATE子句,如何解锁行,stored-procedures,plsql,oracle10g,oracle11g,plsqldeveloper,Stored Procedures,Plsql,Oracle10g,Oracle11g,Plsqldeveloper,在这个过程中,如果我们使用FOR UPDATE子句,它将锁定特定的行,并且只允许一个客户端进行更新,而另一个客户端此时只能获取同一行中的数据 我的问题是它什么时候会解锁该行,在编写过程中我们应该如何解锁该行? 以这个例子为例,我使用FOR UPDATE子句进行客户机计数,当它在这个过程中解锁特定的行时 create or replace PROCEDURE newprocedur(inMerid IN VARCHAR2,outCount OUT NUMBER) AS CURSOR c1 IS

在这个过程中,如果我们使用
FOR UPDATE
子句,它将锁定特定的行,并且只允许一个客户端进行更新,而另一个客户端此时只能获取同一行中的数据

我的问题是它什么时候会解锁该行,在编写过程中我们应该如何解锁该行? 以这个例子为例,我使用
FOR UPDATE
子句进行客户机计数,当它在这个过程中解锁特定的行时

create or replace PROCEDURE newprocedur(inMerid IN VARCHAR2,outCount OUT NUMBER) AS 
CURSOR c1 IS 
  select CLIENT_COUNT 
    from OP_TMER_CONF_PARENT 
   where MER_ID = inMerid 
   FOR UPDATE OF CLIENT_COUNT;
BEGIN
  Open c1;
  loop
    fetch c1 into outCount;
    exit when c1%NOTFOUND;
    outCount:=outCount+1;
    update OP_TMER_CONF_PARENT 
       set CLIENT_COUNT = outCount 
     where current of c1;
  end loop;
  close c1;
END;

提交后,更新的行将被解锁。

。。。或者是一次倒退。简而言之:当事务结束时。或
roolback
语句。请注意,如果在
update
语句之后发出
commit
rollback
语句,您将无法针对该
for update
游标执行另一个
fetch
。这将导致
ORA-01002:fetch out-sequence
这里,多个客户端将使用相同的MER_ID同时调用上述过程,在这种情况下,我必须锁定行,只有一个客户端应在tat时间更新计数,其他客户端应有权仅获取而不是更新,所以我使用FOR UPDATE子句。我这样做对吗???或者我应该如何修改上述代码?