Dev/Database

[Oracle] 데이터 중복처리 막는법, for update 사용

알굼 2024. 8. 28. 17:24
반응형

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 가 가능한지?

반응형