안녕하세요.
입금액이 들어오면 상환테이블에서 상환금액을 입금액이 될때까지 빼서 상환완료일자, 입금액, 잔액, 완료여부를
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 |
-- 다음과 같은 형태로 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; /