한줄씩 update를 해주는 쿼리가 있을까요?? 0 6 3,517

by ReLight [Oracle 기초] [2015.11.04 15:48:42]


안녕하세요.

실시간으로 재고관리하는 프로그램만들고 있는데요..

재고량과 사용량에 대해서 수정하고 저장하는 부분을 구현중인데

이전꺼 수정하고나서 재고량을 재계산하는 부분에서 막혀있는데요..

도움을 받을수 있을가 해서 올려봅니다.

예시)

---------------------------------
순번/ 수량/ 재고량
1   / 3개 / 3개
2   / 2개 / 1개
3   / 2개 / -1개
---------------------------------
- 순번 1의 수량을 1개로 바꿈 => 순번1을 기준으로 update를 함.

순번 1 / 수량 1개 / 재고량 5개
---------------------------------

- 뒤에 쿼리들을 일괄 update

 

update 테이블 a
   set a.재고량 = ( select b.재고량 -- 이전꺼 재고량
                               from 테이블 b
                            where b.순번 = a.순번 - 1 ) + a.수량
 where a.순번 > 1 ;

---------------------------------
순번/ 수량/ 재고량
1   / 3개 / 5개
2   / 2개 / 3개
3   / 2개 / -1개
---------------------------------

이렇게 나오고 있는데요.

생각해보니깐 update를 한다고 해서 바로 수정이 되는게 아니여서

3번째 줄 계산이 바뀐걸로 안되더라구요..

이거를 한줄한줄씩 update 해주면 될꺼같은데

어떻게 하면 바꿀수 있을까요..??ㅜㅜ

알고 계시는분 도와주시면 감사하겠습니다.

by ReLight [2015.11.04 15:51:57]

개인적인 생각으로는 for loop를 돌리면 가능한건지도 궁금하네요..


by ReLight [2015.11.04 16:17:24]

자체 해결되었습니다..^^

For Loop로 되네요~

for r in (
             select *
               from 테이블
             where 순번  > wk_seqno(예시 기준 : 2)
            )
loop
      update 테이블 a
            set a.재고량 = (
                                    select b.재고량
                                       from 테이블 b
                                    where b.순번   = a.순번 - 1
                                   ) + a.수량
       where a.순번 > wk_seqno(예시 기준 : 2);
end loop;

 


by 마농 [2015.11.04 16:38:28]

해결된 것 맞나요?

뭔가 엉성한데요???

검증 여러번 해보세요....


by ReLight [2015.11.04 17:05:13]

네~ 임시로 20줄정도 만들어서 첫번째줄 수정했더니 잘되네요~

sql문 만드는 줄이 너무 엉성하게 만들어지네요..

for r in ( select * from 테이블 where 순번  > 1 )
loop
     update 테이블 a
           set a.재고량 = ( select b.재고량 from 테이블 b where b.순번   = a.순번 - 1 ) + a.수량
     where a.순번 = r.순번;
end loop;

 


by 마농 [2015.11.04 17:22:57]

위에 올리신 엉성한 소스와는 다른 틀이 잡힌 소스네요. ㅎㅎ

엉성하단 표현은 줄이 비툴하다는게 아니고, 로직이 틀렸다는 의미입니다.

앞선 소스에서는 loop 안에서 r 이 사용되질 않았었죠?

이번 소스에서는 r 을 사용했네요.

그런데 + 하는거 맞나요? - 가 아닌지?


by atumlee [2015.11.04 17:18:22]
보통 PSI 에서의 재고수량은 "이전 EOH"(또는 "현재 BOH") + "생산수량" - "판매수량"인데,
여기선 생산수량이 없으니 현재 재고는 "이전 재고" - "현재 사용량" 이 되어야 하지 않나요?

SELECT  A.순번, A.수량, SUM(A.기초재고-A.수량) OVER (ORDER BY A.순번) AS 재고량
FROM    (
        SELECT  순번, DECODE(순번,1,수량+재고량,0) AS 기초재고, DECODE(순번,1,1,수량) AS 수량
        FROM    테이블
        ) A
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입