반응형
FOR UPDATE 하면 오라클에서 중복처리를 막을 수 있는데, ORACLE은 row 단위로 LOCK을 하므로 해당 데이터만 중복 접근을 막아주는 것이다.
사용자가 화면에서 버튼을 눌러 프로시저에서 STUDENT 테이블의 데이터를 수정하던 도중에, 사용자가 버튼을 한번 더 눌렀을 때, 서비스단에서 걸어둔 처리 완료 플래그 validation에 걸리지 않을 수 있다.
왜냐하면, 프로시저가 다 돌고나서 완료 플래그 처리하기전이기 때문이다.
LOCK 을 걸고자 하는 데이터를 가져오는 쿼리에 FOR UPDATE 만 붙혀주면 된다.
SELECT *
INTO v_student
FROM STUDENT
WHERE NAME = P_NAME
AND STDKY = v_stdky
FOR UPDATE;
<추가 확인 필요한 사항>
1. 중복처리를 막기위해서 내생각에는 서비스단에서 처리중 플래그 update -> 프로시저 호출 하면 될거같고, 에러처리가 났을 때, try- catch 로 막아두면 될 것 같은데 책임님 말로는, 롤백하는 로직도 만들어야 하고, 동시처리? 를 구현해야한다고 하신다.
2. 한 프로시저에서 두 개 이상의 FOR UPDATE 가 가능한지?
반응형