한 트랜잭션 내에서 나중에 변경할 목적으로 데이터를 읽을 때 사용한다. 기본적으로 실행하면 조회할 데이터의 Lock을 얻지 못할 경우 얻을 때까지 무작정 기다린다.
선택된 레코드들에 대해 베타적인 Lock을 커밋할 때까지 적용한다.
데이터의 일관성을 보장하기 위해 사용한다.
declare
l_sal number;
begin
select sal into l_sal from emp where empno = 7900 for update;
...
update emp set sal = l_sal + 100 where empno = 7900;
commit;
end;
select for update 뒤에 nowait를 지정하면 select할 데이터의 Lock을 얻을 수 없으면 바로 에러처리한다.
→ SELECT문 전체를 종료한다.
select for update 뒤에 wait {숫자} 입력시 작동하며, wait 3 지정 시 select할 데이터의 Lock을 얻을 수 없을 때 3초동안 내내 Lock을 재시도한뒤, 실패할 경우 포기한다. → SELECT 문 전체 종료