Lock Select
업무 요건상 동시에 처리할 수 없는 데이터를 Select할 때 DB에서 제공하는 FOR UPDATE 키워드를 사용하여 Lock 처리한다. WAIT 시간은 업무에 따라 알맞게 설정한다.
형식
NOWAIT : 해당 Row가 Lock 상태일 때 바로 SQL 에러(ORA-00054)를 발생시킨다.
WAIT X : 해당 Row가 Lock 상태일 때 X초 재시도 후 SQL 에러(ORA-30006)을 발생시킨다.
SELECT
EMP_ID AS empId,
EMP_NM AS empNm,
SALARY AS salary,
DEPT_CD AS deptCd
FROM EMPLOYEE
WHERE DEPT_CD = #{input.deptCd}
FOR UPDATE [NOWAIT | WAIT seconds]
개발 및 유의사항
조회 Row가 Lock 상태이면 CannotAcquireLockException(caused by ORA-00054/ORA-30006)이 발생한다.업무 구현에 필요한 경우에만 catch 한다.
// dbio호출
try {
evio.selectEmployee(input);
} catch (CannotAcquireLockException e) {
// DB LOCK 타임아웃 발생시 처리로직
}