C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[70325] Re:허접하지만 자답입니다.
김병규 [] 3770 읽음    2013-11-12 19:27
허접하지만 자답입니다.

while 문 들어가서 select 하는 부분에서 현재 검색된 레코드의 OrderNo 를 같이 읽어 변수에 저장하여

Update where 조건절에서 OrderNo를 넣어 주니 해결이 되었네요..

Select 에서 Limit 걸어 레코드를 불러 오면 현재 불러온 레코드에서 Update하면 되는줄 알았는데..

Update 에서 조건이 정확하지 않아 전체 레코드가 동일한 값으로 바뀐듯 하네요..

저 같은 초보를 위한 자답이였습니다.

혹 다른 방법 알고 계시면 조언 부탁드립니다.


김병규 님이 쓰신 글 :
: MYSQL 을 처음 접해 보다 보니.. 막히는게 너무나 많네요..
:
: 재고 관리 프로그램을 짜고 있는데요..
:
: 막히는 부분이 while 루프 쪽입니다.
:
: 어떤 제품이 출고 되었을 경우 재고 테이블의 재고량 업데이트를 위한 프로시져 입니다.
:
: 동일 재고 레코드가 하나인 경우는 문제가 되지 않지만.. 재고 테이블의 재고 품목이 발주 순번 별로
:
: 들어가 있어서 동일 품목이지만 재고 레코드가 1개 이상일 경우가 있게 됩니다.
:
: 일단 품목으로 레코드를 찾은 다음 레코드 갯수를 저장하고 while 루프 안에서
:
: 찾은 결과 레코드를 순차적으로 누적 재고량을 업데이트 해주고 싶습니다.
:
: 그래서 아래와 같이 while루프를 구성하였는데...
:
: 실행해보니 AcumStCnt_ea  값이 모두 동일한 값으로 들어가버리네요..
:
: 그냥 빌더상에서 해버리면 Next() 로 레코드 옮겨 가며 현재 재고량 저장하면서
:
: 차감된 만큼 누적 재고량 저장 해버리면 되던데...
:
: 프로시져 안에서 자동으로 하게 할려고 하니 잘 안되네요..
:
: while문 쪽을 어떻게 수정해야 할까요..
:
: 고수님들의 조언 부탁드립니다.
:
: 감사합니다.
:
:
:
: DELIMITER $$
: create Procedure StkTbUseProc (OdNo INT, PSN char(10), Cnt INT)
: -- READS SQL DATA
: BEGIN
: DECLARE SUMCnt INT;
: DECLARE SUMCnt2 INT;
: DECLARE USG DOUBLE;
: DECLARE USG2 DOUBLE;
: DECLARE RecCnt INT;
: DECLARE i INT DEFAULT 1;
:
:     Select StCnt_ea-Cnt from stacktb where OrderNo = OdNo and PSName = PSN and StCnt_ea >0 into SUMCnt;
:
:     Select CalUSG(SUMCnt, PSN) into USG;
:    
:     -- 출고 량 재고 해당 발주 순번 재고량에 반영
:     Update stacktb SET StCnt_ea = SUMCnt, StCnt_usg = USG, AcumStCnt_ea = SUMCnt, AcumStCnt_usg = USG wher e OrderNo = OdNo and PSName = PSN;
:
:     Select count(*) into RecCnt from stacktb where PSName = PSN;
:
:                // 관련 재고 레코드 갯수 찾아서 각 레코드 순차적으로 결과 업데이트
:     while i <= RecCnt DO
:         Select StCnt_ea+SUMCnt into SUMCnt from stacktb limit i, 1;       
:         Select CalUSG(SUMCnt, PSN) into USG;
:         Update stacktb set AcumStCnt_ea = SumCnt, AcumStCnt_usg = USG;
:         SET i = i+1;
:     END WHILE;
:                // 관련 재고 레코드 갯수 찾아서 각 레코드 순차적으로 결과 업데이트   
: END$$
: DELIMITER ;

+ -

관련 글 리스트
70324 MYSQL 코드 문제점 조언 부탁드립니다. 김병규 3604 2013/11/12
70325     Re:허접하지만 자답입니다. 김병규 3770 2013/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.