oracle 关于房贷计算过程

时间:2023-03-09 08:48:07
oracle 关于房贷计算过程

create or replace procedure fd(p_bj in number, --贷款本金
p_nll in number, --年利率
p_ns in number, --贷款年数
p_xh in number, --还款月序号
msg out varchar) is
v_yll number;
v_ys number;
v_yhbj number;
v_myyge number;
v_myhlx number;
v_myhbj number;
v_zlx number;
v_mydjlx number;
begin
v_yll := p_nll / 12;
v_ys := p_ns * 12;
if p_xh > v_ys then
msg := '还款月序号不可大于还款月数';
goto exits;
end if;
select (p_bj * v_yll * power((1 + v_yll), v_ys)) /
(power((1 + v_yll), v_ys) - 1)
into v_myyge
from dual;
select (p_bj * v_yll * power((1 + v_yll), v_ys)) /
(power((1 + v_yll), v_ys) - 1) * v_ys - p_bj
into v_zlx
from dual;
msg := msg|| '等额本息';
msg := msg|| chr(10) ||'总利息:' || round(v_zlx, 2);
select p_bj * v_yll *
(power((1 + v_yll), v_ys) - power((1 + v_yll), (p_xh - 1))) /
(power((1 + v_yll), v_ys) - 1)
into v_myhlx
from dual;
select p_bj * v_yll * power((1 + v_yll), (p_xh - 1)) /
(power((1 + v_yll), v_ys) - 1)
into v_myhbj
from dual;
msg := msg||chr(10) ||'第' || p_xh || '个月 供额:' || round(v_myyge, 2) || ' 本金:' || round(v_myhbj, 2) || ' 利息:' || round(v_myhlx, 2);
select p_bj / v_ys into v_myhbj from dual;
select p_bj / v_ys * v_yll into v_mydjlx from dual;
select ((p_bj / v_ys + p_bj * v_yll) + p_bj / v_ys * (1 + v_yll)) / 2 * v_ys - p_bj
into v_zlx
from dual;
msg := msg||chr(10) ||'等额本金';
msg := msg||chr(10) ||'总利息:' || round(v_zlx, 2) || ' 每月供递减额:' || round(v_mydjlx, 2);
v_yhbj := p_bj / v_ys * (p_xh - 1);
select (p_bj - v_yhbj) * v_yll into v_myhlx from dual;
select (p_bj / v_ys) + v_myhlx into v_myyge from dual;
msg := msg||chr(10) ||'第' || p_xh || '个月 供额:' || round(v_myyge, 2) ||' 本金:' || round(v_myhbj, 2) ||
' 利息:' || round(v_myhlx, 2);
<<exits>>
null;
exception
when others then
msg := sqlerrm;
end;

--------------------------------------------------------------------

输入如:贷款本金 400000  万

年利率 0.049

贷款年数 20

还款月序号  1 (第一个月)

返回结果:

等额本息

总利息:228266.29

第1个月 供额:2617.78 本金:984.44 利息:1633.33
等额本金
总利息:196816.67 每月供递减额:6.81
第1个月 供额:3300 本金:1666.67 利息:1633.33

--------------------------------------------------------------------