입금액으로 상환금액을 update방법을 문의합니다. 0 1 1,949

by 오라클초보 [SQL Query] [2014.10.30 23:28:45]


안녕하세요.

입금액이 들어오면 상환테이블에서 상환금액을 입금액이 될때까지 빼서 상환완료일자, 입금액, 잔액, 완료여부를

update 쿼리로 가능하면 쿼리를 부탁드립니다.

회차 상환일자  상환금액 상환완료일자 입금액 잔액 완료여부
1 20141123     583,000   0 0 N
2 20141223     583,000   0 0 N
3 20150123     583,000   0 0 N
4 20150223     583,000   0 0 N
5 20150323     583,000   0 0 N
6 20150423     583,000   0 0 N
7 20150523     583,000   0 0 N
8 20150623     583,000   0 0 N
9 20150723     583,000   0 0 N
10 20150823     583,000   0 0 N
11 20150923     583,000   0 0 N
12 20151023     583,000   0 0 N
13 20151123     583,000   0 0 N
14 20151223     583,000   0 0 N
15 20160123     583,000   0 0 N
16 20160223     583,000   0 0 N
17 20160323     672,000   0 0 N

1. 입금일자 : 2014.10.30, 입금액 : 2백만원일때는 아래와 같이 상환완료일자, 입금액, 잔액, 완료여부를

update를 합니다.

회차 상환일자  상환금액 상환완료일자 입금액 잔액 완료여부
1 20141123     583,000 20141030      583,000 0 Y
2 20141223     583,000 20141030      583,000 0 Y
3 20150123     583,000 20141030      583,000 0 Y
4 20150223     583,000        251,000   332,000 N
5 20150323     583,000   0 0 N
6 20150423     583,000   0 0 N
7 20150523     583,000   0 0 N
8 20150623     583,000   0 0 N
9 20150723     583,000   0 0 N
10 20150823     583,000   0 0 N
11 20150923     583,000   0 0 N
12 20151023     583,000   0 0 N
13 20151123     583,000   0 0 N
14 20151223     583,000   0 0 N
15 20160123     583,000   0 0 N
16 20160223     583,000   0 0 N
17 20160323     672,000   0 0 N

2. 입금일자 : 2014.11.23, 입금액 : 915,000원일때는 아래와 같이 상환완료일자, 입금액, 잔액, 완료여부를

update를 합니다.

회차 상환일자  상환금액 상환완료일자 입금액 잔액 완료여부
1 20141123     583,000 20141030      583,000 0 Y
2 20141223     583,000 20141030      583,000 0 Y
3 20150123     583,000 20141030      583,000 0 Y
4 20150223     583,000 20141123      583,000 0 Y
5 20150323     583,000 20141123      583,000 0 Y
6 20150423     583,000   0 0 N
7 20150523     583,000   0 0 N
8 20150623     583,000   0 0 N
9 20150723     583,000   0 0 N
10 20150823     583,000   0 0 N
11 20150923     583,000   0 0 N
12 20151023     583,000   0 0 N
13 20151123     583,000   0 0 N
14 20151223     583,000   0 0 N
15 20160123     583,000   0 0 N
16 20160223     583,000   0 0 N
17 20160323     672,000   0 0 N
by 마농 [2014.10.31 14:21:45]
-- 다음과 같은 형태로 Procedure 나 Trigger 형태로 적용하시면 되겠습니다.
DECLARE
    -- 입력인자(대출번호, 입금액) --
    입력_대출번호 상환.대출번호%TYPE := 111;
    입력_입금액   NUMBER             := 2000000;
    입금잔액      NUMBER             := 입력_입금액;
    CURSOR c IS
    SELECT *
      FROM 상환
     WHERE 대출번호 = 입력_대출번호
       AND 완료여부 = 'N'
     ORDER BY 회차
    ;
BEGIN
    FOR c1 IN c
    LOOP
        -- 최초 잔액이 0 인게 찜찜하네요. 그래서 추가된 로직.Start. --
        IF c1.잔액 = 0 THEN
            c1.잔액 := c1.상환금액;
        END IF;
        -- 최초 잔액을 제대로 셋팅해 준다면 필요 없는 로직.End. --
        IF c1.잔액 <= 입금잔액 THEN
            c1.입금액       := c1.잔액;
            c1.잔액         := 0;
            c1.상환완료일자 := TO_CHAR(sysdate, 'yyyymmdd');
            c1.완료여부     := 'Y';
        ELSE
            c1.입금액 := 입금잔액;
            c1.잔액   := c1.잔액 - c1.입금액;
        END IF;
        입금잔액 := 입금잔액 - c1.입금액;
        UPDATE 상환
           SET 상환완료일자 = c1.상환완료일자
             , 입금액       = c1.입금액      
             , 잔액         = c1.잔액        
             , 완료여부     = c1.완료여부    
         WHERE 대출번호 = c1.대출번호
           AND 회차     = c1.회차
        ;
        IF 입금잔액 = 0 THEN
            goto End_Process;
        END IF;
    END LOOP;
    << End_Process >>
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;
/

 

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