테이블 A,B가 있습니다.
A는 ID, POINT
B에 ID, POINT_BEFORE, POINT_ADJUST, POINT_AFTER
프로시저가 있습니다. 대충 아래와 같습니다.
PROCEDURE(
v_ID VARCHAR2,
v_POINT_ADJUST NUMBER
)
IS
v_POINT_BEFORE NUMBER;
BEGIN
-- 입력한 ID의 현재 포인트 값을 가져옴
SELECT POINT
INTO v_POINT_BEFORE
FROM A
WHERE ID = v_ID;
-- 현재 포인트가 수정요청한 포인트 보다 작으면 프로시저 끝
IF v_POINT_BEFORE < v_POINT_ADJUST THEN
RETURN;
END IF;
-- v_POINT_BEFORE >= v_POINT_ADJUST 라면
-- 수정요청한 금액을 뺀 금액이 POINT_AFTER 가 됨
INSERT INTO B(ID, POINT_BEFORE, POINT_ADJUST, POINT_AFTER)
VALUES(v_ID, v_POINT_BEFORE, v_POINT_ADJUST, v_POINT_BEFORE - v_POINT_ADJUST);
END;
어느날 보니, B 테이블에
[ID, POINT_BEFORE, POINT_ADJUST, POINT_AFTER]
A, 20000, 60000, -40000
이런 행이 있습니다.
프로시저에서 20000 < 60000 이기때문에 INSERT문을 실행할 수 가 없고,
외부에서는 저 프로시저를 통하지않고서는 B테이블에 접근 할 수 없고,
내부의 어떤사람도 B테이블을 직접적으로 손댄적이 없는데.....
저게 어떻하면 가능할까요?