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子句。我这样做对吗???或者我应该如何修改上述代码?