1

절에서는 절을 사용하면 특정 행을 잠그고 하나의 클라이언트 만 업데이트 할 수있는 반면 다른 클라이언트는 그 당시 동일한 행의 데이터 만 페치 할 수 있습니다.FOR UPDATE 절을 사용하면 행의 잠금을 해제하는 방법

내 질문에 언제 행 잠금을 해제 할 것인가? 절차를 작성하는 동안 행을 잠금 해제하려면 어떻게해야합니까? 여기 예제를 사용합니다.이 절차에서 특정 행의 잠금을 해제 할 때 client_count에 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; 

답변

2

업데이트 된 행은 커밋 후에 잠금 해제됩니다.

+0

... 또는 롤백. 간단히 말해서 : 트랜잭션이 끝나는 시점. –

+1

또는'roolback' 문. 그리고'update' 문 다음에'commit' 또는'rollback' 문을 사용하면'for update '커서에 대해 다른'fetch'를 수행 할 수 없다는 점에 유의하십시오. 그것은 'ORA-01002 : fetch out of sequence'를 초래할 것입니다. –

+0

여러 클라이언트가 동일한 MER_ID를 갖는 동시에 위의 절차를 호출합니다.이 경우 행을 잠그기 만하면 하나의 클라이언트가 tat 시간에 카운트를 업데이트해야합니다 그리고 다른 사람이 업데이 트를 가져올 수있는 권리가 있어야합니다, 그래서 내가 FOR UPATE 절을 사용하고 있습니다. 내가 올바른 방법으로 일을하고 ??? 또는 위의 코드를 어떻게 수정해야합니까? – 1001