안녕하세요.
제목을 쓰기도 에매한 질문이네요 ㅠ.ㅠ
스토어드 프로시저에서
BEGIN TRAN
Insert Into TBL_MEM_POINT_HISTORY (MEM_ID, POINT, LAST_POINT)
Select MEM_ID, 2000, (Select POINT+2000 From TBL_MEMBER Where MEM_ID = M.MEMID)
From TBL_MEMBER M
Inner Join TBL_POINT P On P.MEM_ID = M.MEMID Where M.MEM_ID = 'rocker'
조건에 따라
COMMIT TRAN
또는
ROLLBACK TRAN
위의 쿼리는 단순히 레코드를 Insert하는 쿼리입니다.
단, 위의 쿼리가 회원아이디 한사람에 대해 2번 처리될 수도 있습니다.
즉, MEMID = 'rocker' 회원은 위의 조건이 2번 해당되어 같은 트랜잭션 내에서 2회처리가되는데
문제는 rocker회원의 현재 포인트가 10,000점이라고 할때
MEM_ID POINT LAST_POINT
-----------------------------------------------------------
rocker 1,000 11,000 -- 현재 포인트에서 1,000점 더하여 지금 11,000포인트라는 로그를 남김.
rocker 1,000 12,000 -- 현재 포인트에서 1,000점 더하여 지금 12,000포인트라는 로그가 남아야함.
위처럼 되어야하는데
MEM_ID POINT LAST_POINT
-----------------------------------------------------------
rocker 1,000 11,000
rocker 1,000 11,000
첫번째 Insert가 실행되고 커밋이 안되서 그런지 두번째 Insert의 LAST_POINT의 결과가 12,000이 되질 않습니다.
Row단위로 처리하기 싫어서 위와같이 처리를 하려는데 부딪혔네요 ㅠ.ㅠ
부탁드립니다~~~
Comment 1
-
History
2014.04.07 09:29


쿼리 자체가 잘못된것같네여..
Insert 할때 2개가 insert 되는데 첫번째 in 한뒤 2번째 in 하면 증가값된 포인트가 보이고 싶은것 같습니다.
하지만 해당 쿼리는 select 할때의 테이블값들을 기준으로 insert 하는것이므로 100 번 insert 해도 전부 같은 값이 insert 될것입니다.
select 할때 포인트를 누적으로 보일수 있도록 쿼리를 조정 ( rank 함수등을 이용해서) 하시거나
while 문 혹은 cursor 문을 사용해서 1 row 단위별로 처리를 해야될듯하네여