오라클 대출이자계산 만들려고하는데 질문이요 0 2 5,145

by 뿌꿍이 [PL/SQL] loop cursor [2016.09.08 21:16:45]


프로시져로 

원금균등, 원리금균등 상환구분 이자계산(일수, 월수) 에 따라

앞으로 상환해야할 상환스케줄을 만들려고합니다.

우선 준으로잡을 가장최근 상환일 이자계산할 이자기산일수 원금상환액 이자상환액 대부잔액등을 가지고와서

loop를 돌면서

select * dual로 계산하여 한행씩뽑아서 

리스트처럼 담고싶습니다.

방법이없을가요 ㅠㅠ 리스트처럼 만들어서 리턴시켜서 웹에뿌려주려고하거든요

 

by Kyle [2016.09.09 09:19:18]

이곳은 DB 라는 키워드로 여러사람이 모이는 곳이기때문에 게시자님이 쉬운 단어라 생각하는 것도

모르는 분들이 많을 수 있습니다.

따라서 어떤 문제에 대한 해답을 얻기를 원하신다면 모든 사람이 이해 할 수 있도록 풀어서 얘기를 

해주시거나, 문제를 단순화 시켜 업무를 모르더라도 이해 할 수 있도록 올려 주셔야 답을 얻으 실수 

있을 듯 합니다.

원금균등이니 원리균등이니 저에게는 생소한 얘기네요

 


by 마농 [2016.09.09 10:29:47]
WITH t AS
(
SELECT 1000000 a -- 대출원금
     , 0.03    r -- 연이율
     , 36      n -- 상환개월
  FROM dual
)
, t1(a, r, n, m, x0, x1, x2, x3, x4, y0, y1, y2, y3, y4) AS
(
SELECT a, r, n
     , 1 m
     , a x0
     , ROUND(a / n) x1
     , ROUND(a * r/12) x2
     , ROUND(a / n) + ROUND(a * r/12) x3
     , a - ROUND(a / n) x4
     , a y0
     , ROUND( (a * r/12 * POWER(1 + r/12, n))
            / (POWER(1 + r/12, n) - 1)
            )
     - ROUND(a * r/12) y1
     , ROUND(a * r/12) y2
     , ROUND( (a * r/12 * POWER(1 + r/12, n))
            / (POWER(1 + r/12, n) - 1)
            ) y3
     , a
     - ROUND( (a * r/12 * POWER(1 + r/12, n))
            / (POWER(1 + r/12, n) - 1)
            )
     + ROUND(a * r/12) y4 
  FROM t
 UNION ALL
SELECT a, r, n
     , m + 1 m
     , x4 x0
     , LEAST(x4, x1) x1
     , ROUND(x4 * r/12) x2
     , LEAST(x4, x1) + ROUND(x4 * r/12) x3
     , x4 - LEAST(x4, x1) x4
     , y4 y0
     , y3
     - ROUND(y4 * r/12) y1
     , ROUND(y4 * r/12) y2
     , y3
     , y4
     - y3
     + ROUND(y4 * r/12) y4 
  FROM t1
 WHERE m + 1 <= n
)
SELECT a       대출원금
     , r       연이율
     , n       상환기간
     , m       회차
     , x0      원금균등상환_원금
     , SUM(x1) 원금균등상환_상환
     , SUM(x2) 원금균등상환_이자
     , SUM(x3) 원금균등상환_합계
     , x4      원금균등상환_잔액
     , y0      원리금균등상환_원금
     , SUM(y1) 원리금균등상환_상환
     , SUM(y2) 원리금균등상환_이자
     , SUM(y3) 원리금균등상환_합계
     , y4      원리금균등상환_잔액
  FROM t1
 GROUP BY ROLLUP((a, r, n, m, x0, x4, y0, y4))
;

공식을 적용하여 만들어 보긴 했는데..

원리금균등상환 합계에 오차가 발생하네요.

반올림 적용하다 보니 그런 듯 한데 보정이 조금 필요하겠네요.

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