1

句を使用する手順FOR UPDATEでは、特定の行をロックし、1 つのクライアントのみを更新できるようにしますが、他のクライアントはその時点で同じ行のデータしかフェッチできません。

私の質問は、いつ行のロックを解除するかということです。手順を書いているときに行のロックを解除するにはどうすればよいですか? ここでこの例を取り上げFOR UPDATEます。この手順で特定の行のロックを解除するときに、client_count の句を使用しています。

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;
4

1 に答える 1

2

更新された行は、コミット後にロック解除されます。

于 2012-10-31T07:47:07.100 に答える