发表于: 2005.04.24 23:36
分类: ORACLE
出处: http://yangtingkun.itpub.net/post/468/27549
---------------------------------------------------------------
又进行了一些修改,增加了计算提前还款的功能。
计算月还款的小过程(一):http://blog.itpub.net/post/468/27307
计算月还款的小过程(二):http://blog.itpub.net/post/468/27440
代码:
SQL> CREATE OR REPLACE PACKAGE P_PAY_MONTHLY AS
2
3 TYPE T_MONTHLY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4
5 G_MONTHS NUMBER;
6 G_TOTAL NUMBER;
7 G_BEGIN_DATE DATE;
8 G_TYPE NUMBER;
9 G_PAY_MONTHLY T_MONTHLY;
10 G_PAY_ACCRUAL T_MONTHLY;
11 G_PAY_CORPUS T_MONTHLY;
12 G_PAY_CORPUS_ALREADY T_MONTHLY;
13 G_RATE_PER_MONTH T_MONTHLY;
14
15 PROCEDURE P_CLEAR;
16
17 PROCEDURE P_SET_INITIAL
18 (
19 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_BEGIN_DATE IN DATE, P_RATE_YEAR IN NUMBER, P_TYPE IN
NUMBER
20 );
21
22 PROCEDURE P_CHANGE_RATE(P_CHANGE_DATE IN DATE, P_CHANGE_RATE_PER_YEAR IN NUMBER);
23
24 PROCEDURE P_PAY_AHEAD(P_PAY_AHEAD_DATE IN DATE, P_PAY_AHEAD IN NUMBER);
25
26 PROCEDURE P_REPORT;
27
28 FUNCTION F_PAY_MONTHLY
29 (
30 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_RATE_YEAR IN NUMBER,
31 P_TYPE IN NUMBER, P_MONTH_RETURN IN NUMBER
32 ) RETURN NUMBER;
33 PRAGMA RESTRICT_REFERENCES (F_PAY_MONTHLY, RNDS, WNDS, RNPS, WNPS);
34
35 FUNCTION F_PAY_MONTHLY
36 (
37 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_RATE1_YEAR IN NUMBER, P_RATE1_MONTHS IN NUMBER,
38 P_RATE2_YEAR IN NUMBER, P_TYPE IN NUMBER, P_MONTH_RETURN IN NUMBER
39 ) RETURN NUMBER;
40 PRAGMA RESTRICT_REFERENCES (F_PAY_MONTHLY, RNDS, WNDS, RNPS, WNPS);
41
42 END;
43 /
程序包已创建。
SQL> CREATE OR REPLACE PACKAGE BODY P_PAY_MONTHLY AS
2
3 FUNCTION F_PAY_MONTHLY
4 (
5 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_RATE_YEAR IN NUMBER,
6 P_TYPE IN NUMBER, P_MONTH_RETURN IN NUMBER
7 ) RETURN NUMBER AS
8 V_RATE_MONTH NUMBER := P_RATE_YEAR / 12;
9 V_MONTHS NUMBER := P_YEARS * 12;
10 BEGIN
11 IF P_TYPE = 1 THEN
12 RETURN P_TOTAL * V_RATE_MONTH * POWER(1 + V_RATE_MONTH, V_MONTHS)/(POWER(1 + V_RATE_MONTH, V_MONTHS) - 1);
13 ELSE
14 IF P_MONTH_RETURN > V_MONTHS THEN
15 RETURN 0;
16 END IF;
17 RETURN P_TOTAL/V_MONTHS + (P_TOTAL - P_TOTAL * P_MONTH_RETURN / V_MONTHS)* V_RATE_MONTH;
18 END IF;
19 END;
20
21 FUNCTION F_PAY_MONTHLY
22 (
23 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_RATE1_YEAR IN NUMBER, P_RATE1_MONTHS IN NUMBER,
24 P_RATE2_YEAR IN NUMBER, P_TYPE IN NUMBER, P_MONTH_RETURN IN NUMBER
25 ) RETURN NUMBER AS
26 V_RATE1_MONTH NUMBER := P_RATE1_YEAR / 12;
27 V_RATE2_MONTH NUMBER := P_RATE2_YEAR / 12;
28 V_MONTHS NUMBER := P_YEARS * 12;
29 BEGIN
30 IF P_MONTH_RETURN <= P_RATE1_MONTHS THEN
31 IF P_TYPE = 1 THEN
32 RETURN P_TOTAL * V_RATE1_MONTH * POWER(1 + V_RATE1_MONTH, V_MONTHS)/(POWER(1 + V_RATE1_MONTH, V_MONTHS) - 1);
33 ELSE
34 RETURN P_TOTAL/V_MONTHS + (P_TOTAL - P_TOTAL * P_MONTH_RETURN / V_MONTHS)* V_RATE1_MONTH;
35 END IF;
36 ELSIF P_MONTH_RETURN > V_MONTHS THEN
37 RETURN 0;
38 ELSE
39 IF P_TYPE = 1 THEN
40 RETURN F_PAY_MONTHLY(P_TOTAL * (1 - (POWER(1 + V_RATE1_MONTH, P_RATE1_MONTHS) - 1)
41 / (POWER(1 + V_RATE1_MONTH, V_MONTHS) - 1)), (V_MONTHS - P_RATE1_MONTHS)/12,
42 P_RATE2_YEAR, P_TYPE, P_MONTH_RETURN - P_RATE1_MONTHS);
43 ELSE
44 RETURN P_TOTAL/V_MONTHS + (P_TOTAL - P_TOTAL * P_MONTH_RETURN / V_MONTHS)* V_RATE2_MONTH;
45 END IF;
46 END IF;
47 END;
48
49 PROCEDURE P_CLEAR AS
50 V_EMPTY T_MONTHLY;
51 BEGIN
52 G_MONTHS := NULL;
53 G_TOTAL := NULL;
54 G_BEGIN_DATE := NULL;
55 G_TYPE := NULL;
56 G_PAY_MONTHLY := V_EMPTY;
57 G_PAY_ACCRUAL := V_EMPTY;
58 G_PAY_CORPUS := V_EMPTY;
59 G_PAY_CORPUS_ALREADY := V_EMPTY;
60 G_RATE_PER_MONTH := V_EMPTY;
61 END;
62
63 PROCEDURE P_SET_INITIAL
64 (
65 P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_BEGIN_DATE IN DATE, P_RATE_YEAR IN NUMBER, P_TYPE IN NUMBER
66 ) AS
67 BEGIN
68 G_TOTAL := P_TOTAL;
69 G_MONTHS := P_YEARS * 12;
70 G_BEGIN_DATE := TRUNC(P_BEGIN_DATE, 'MM');
71 G_TYPE := P_TYPE;
72 G_PAY_CORPUS_ALREADY(0) := 0;
73
74 IF P_TYPE = 1 THEN
75 FOR I IN 1..G_MONTHS LOOP
76 G_RATE_PER_MONTH(I) := P_RATE_YEAR/12;
77 G_PAY_MONTHLY(I) := G_TOTAL * G_RATE_PER_MONTH(I) * POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS)
78 / (POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS) - 1);
79 G_PAY_ACCRUAL(I) := (G_TOTAL - G_PAY_CORPUS_ALREADY(I - 1)) * G_RATE_PER_MONTH(I);
80 G_PAY_CORPUS(I) := G_PAY_MONTHLY(I) - G_PAY_ACCRUAL(I);
81 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
82 END LOOP;
83 ELSE
84 FOR I IN 1..G_MONTHS LOOP
85 G_RATE_PER_MONTH(I) := P_RATE_YEAR/12;
86 G_PAY_MONTHLY(I) := G_TOTAL/G_MONTHS + (G_TOTAL - G_PAY_CORPUS_ALREADY(I-1))* G_RATE_PER_MONTH(I);
87 G_PAY_CORPUS(I) := G_TOTAL/G_MONTHS;
88 G_PAY_ACCRUAL(I) := G_PAY_MONTHLY(I) - G_PAY_CORPUS(I);
89 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
90 END LOOP;
91 END IF;
92
93 END;
94
95 PROCEDURE P_CHANGE_RATE(P_CHANGE_DATE IN DATE, P_CHANGE_RATE_PER_YEAR IN NUMBER) AS
96 V_MONTHS NUMBER;
97 V_TOTAL NUMBER;
98 BEGIN
99 IF G_TOTAL IS NOT NULL THEN
100 V_MONTHS := MONTHS_BETWEEN(TRUNC(P_CHANGE_DATE, 'MM'), G_BEGIN_DATE);
101 V_TOTAL := G_TOTAL - G_PAY_CORPUS_ALREADY(V_MONTHS);
102 IF G_TYPE = 1 THEN
103 FOR I IN V_MONTHS + 1..G_MONTHS LOOP
104 G_RATE_PER_MONTH(I) := P_CHANGE_RATE_PER_YEAR/12;
105 G_PAY_MONTHLY(I) := V_TOTAL * G_RATE_PER_MONTH(I) * POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS - V_MONTHS)
106 / (POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS - V_MONTHS) - 1);
107 G_PAY_ACCRUAL(I) := (G_TOTAL - G_PAY_CORPUS_ALREADY(I - 1)) * G_RATE_PER_MONTH(I);
108 G_PAY_CORPUS(I) := G_PAY_MONTHLY(I) - G_PAY_ACCRUAL(I);
109 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
110 END LOOP;
111 ELSE
112 FOR I IN V_MONTHS + 1..G_MONTHS LOOP
113 G_RATE_PER_MONTH(I) := P_CHANGE_RATE_PER_YEAR/12;
114 G_PAY_MONTHLY(I) := V_TOTAL/(G_MONTHS - V_MONTHS) + (G_TOTAL - G_PAY_CORPUS_ALREADY(I-1))* G_RATE_PER_MONTH(I);
115 G_PAY_CORPUS(I) := V_TOTAL/(G_MONTHS - V_MONTHS);
116 G_PAY_ACCRUAL(I) := G_PAY_MONTHLY(I) - G_PAY_CORPUS(I);
117 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
118 END LOOP;
119 END IF;
120 END IF;
121 END;
122
123 PROCEDURE P_PAY_AHEAD(P_PAY_AHEAD_DATE IN DATE, P_PAY_AHEAD IN NUMBER) AS
124 V_MONTHS NUMBER;
125 V_TOTAL NUMBER;
126 BEGIN
127 IF G_TOTAL IS NOT NULL THEN
128 V_MONTHS := MONTHS_BETWEEN(TRUNC(P_PAY_AHEAD_DATE, 'MM'), G_BEGIN_DATE);
129 G_PAY_CORPUS_ALREADY(V_MONTHS) := G_PAY_CORPUS_ALREADY(V_MONTHS) + P_PAY_AHEAD;
130 V_TOTAL := G_TOTAL - G_PAY_CORPUS_ALREADY(V_MONTHS);
131 IF G_TYPE = 1 THEN
132 FOR I IN V_MONTHS + 1..G_MONTHS LOOP
133 G_PAY_MONTHLY(I) := V_TOTAL * G_RATE_PER_MONTH(I) * POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS - V_MONTHS)
134 / (POWER(1 + G_RATE_PER_MONTH(I), G_MONTHS - V_MONTHS) - 1);
135 G_PAY_ACCRUAL(I) := (G_TOTAL - G_PAY_CORPUS_ALREADY(I - 1)) * G_RATE_PER_MONTH(I);
136 G_PAY_CORPUS(I) := G_PAY_MONTHLY(I) - G_PAY_ACCRUAL(I);
137 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
138 END LOOP;
139 ELSE
140 FOR I IN V_MONTHS + 1..G_MONTHS LOOP
141 G_PAY_MONTHLY(I) := V_TOTAL/(G_MONTHS - V_MONTHS) + (G_TOTAL - G_PAY_CORPUS_ALREADY(I-1))* G_RATE_PER_MONTH(I);
142 G_PAY_CORPUS(I) := V_TOTAL/(G_MONTHS - V_MONTHS);
143 G_PAY_ACCRUAL(I) := G_PAY_MONTHLY(I) - G_PAY_CORPUS(I);
144 G_PAY_CORPUS_ALREADY(I) := G_PAY_CORPUS_ALREADY(I-1) + G_PAY_CORPUS(I);
145 END LOOP;
146 END IF;
147 END IF;
148 END;
149
150 PROCEDURE P_REPORT AS
151 BEGIN
152 IF G_TOTAL IS NOT NULL THEN
153 DBMS_OUTPUT.PUT_LINE('贷款总额: ' || G_TOTAL);
154 DBMS_OUTPUT.PUT_LINE('贷款年限: ' || G_MONTHS/12);
155 DBMS_OUTPUT.PUT_LINE('还贷开始日期: ' || TO_CHAR(G_BEGIN_DATE, 'YYYY-MM'));
156 FOR I IN 1..G_MONTHS LOOP
157 DBMS_OUTPUT.PUT_LINE(TO_CHAR(ADD_MONTHS(G_BEGIN_DATE, I - 1), 'YYYY-MM') || ' 本月应还:' ||
158 ROUND(G_PAY_MONTHLY(I), 2) || ' 其中本金:' || ROUND(G_PAY_CORPUS(I), 2) || ' 利息:' ||
159 ROUND(G_PAY_ACCRUAL(I), 2) || ' 累计已还本金:' || ROUND(G_PAY_CORPUS_ALREADY(I), 2));
160 END LOOP;
161 END IF;
162 END;
163
164 END;
165 /
程序包主体已创建。
保留了前面的两个函数,当查询某一个月的应还款时可以调用这两个函数,另外又编写了几个过程,用来设置贷款的初始状态、设置提前还款或利息变更。
计算等额本息,5年贷款200000,年利息5.04%,还贷方式为等额本息。从2004年5月开始还贷,2005年1月利息增长为5.31%,预计2005年8月提前还款10万,2006年1月利息增长为5.51%,下面给出计算过程:
SQL> SET SERVEROUT ON SIZE 1000000
SQL> EXEC P_PAY_MONTHLY.P_SET_INITIAL(200000, 5, TO_DATE('2004-5', 'YYYY-MM'), 0.0504, 1)
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_REPORT
贷款总额: 200000
贷款年限: 5
还贷开始日期: 2004-05
2004-05 本月应还:3777.91 其中本金:2937.91 利息:840 累计已还本金:2937.91
2004-06 本月应还:3777.91 其中本金:2950.25 利息:827.66 累计已还本金:5888.17
2004-07 本月应还:3777.91 其中本金:2962.64 利息:815.27 累计已还本金:8850.81
2004-08 本月应还:3777.91 其中本金:2975.09 利息:802.83 累计已还本金:11825.89
2004-09 本月应还:3777.91 其中本金:2987.58 利息:790.33 累计已还本金:14813.48
2004-10 本月应还:3777.91 其中本金:3000.13 利息:777.78 累计已还本金:17813.61
2004-11 本月应还:3777.91 其中本金:3012.73 利息:765.18 累计已还本金:20826.34
2004-12 本月应还:3777.91 其中本金:3025.38 利息:752.53 累计已还本金:23851.72
2005-01 本月应还:3777.91 其中本金:3038.09 利息:739.82 累计已还本金:26889.81
2005-02 本月应还:3777.91 其中本金:3050.85 利息:727.06 累计已还本金:29940.66
2005-03 本月应还:3777.91 其中本金:3063.66 利息:714.25 累计已还本金:33004.32
2005-04 本月应还:3777.91 其中本金:3076.53 利息:701.38 累计已还本金:36080.86
2005-05 本月应还:3777.91 其中本金:3089.45 利息:688.46 累计已还本金:39170.31
2005-06 本月应还:3777.91 其中本金:3102.43 利息:675.48 累计已还本金:42272.74
2005-07 本月应还:3777.91 其中本金:3115.46 利息:662.45 累计已还本金:45388.19
2005-08 本月应还:3777.91 其中本金:3128.54 利息:649.37 累计已还本金:48516.74
2005-09 本月应还:3777.91 其中本金:3141.68 利息:636.23 累计已还本金:51658.42
2005-10 本月应还:3777.91 其中本金:3154.88 利息:623.03 累计已还本金:54813.3
2005-11 本月应还:3777.91 其中本金:3168.13 利息:609.78 累计已还本金:57981.43
2005-12 本月应还:3777.91 其中本金:3181.43 利息:596.48 累计已还本金:61162.86
2006-01 本月应还:3777.91 其中本金:3194.8 利息:583.12 累计已还本金:64357.66
2006-02 本月应还:3777.91 其中本金:3208.22 利息:569.7 累计已还本金:67565.88
2006-03 本月应还:3777.91 其中本金:3221.69 利息:556.22 累计已还本金:70787.57
2006-04 本月应还:3777.91 其中本金:3235.22 利息:542.69 累计已还本金:74022.79
2006-05 本月应还:3777.91 其中本金:3248.81 利息:529.1 累计已还本金:77271.59
2006-06 本月应还:3777.91 其中本金:3262.45 利息:515.46 累计已还本金:80534.05
2006-07 本月应还:3777.91 其中本金:3276.16 利息:501.76 累计已还本金:83810.2
2006-08 本月应还:3777.91 其中本金:3289.92 利息:488 累计已还本金:87100.12
2006-09 本月应还:3777.91 其中本金:3303.73 利息:474.18 累计已还本金:90403.85
2006-10 本月应还:3777.91 其中本金:3317.61 利息:460.3 累计已还本金:93721.46
2006-11 本月应还:3777.91 其中本金:3331.54 利息:446.37 累计已还本金:97053.01
2006-12 本月应还:3777.91 其中本金:3345.54 利息:432.38 累计已还本金:100398.54
2007-01 本月应还:3777.91 其中本金:3359.59 利息:418.33 累计已还本金:103758.13
2007-02 本月应还:3777.91 其中本金:3373.7 利息:404.22 累计已还本金:107131.83
2007-03 本月应还:3777.91 其中本金:3387.87 利息:390.05 累计已还本金:110519.69
2007-04 本月应还:3777.91 其中本金:3402.1 利息:375.82 累计已还本金:113921.79
2007-05 本月应还:3777.91 其中本金:3416.38 利息:361.53 累计已还本金:117338.17
2007-06 本月应还:3777.91 其中本金:3430.73 利息:347.18 累计已还本金:120768.91
2007-07 本月应还:3777.91 其中本金:3445.14 利息:332.77 累计已还本金:124214.05
2007-08 本月应还:3777.91 其中本金:3459.61 利息:318.3 累计已还本金:127673.66
2007-09 本月应还:3777.91 其中本金:3474.14 利息:303.77 累计已还本金:131147.8
2007-10 本月应还:3777.91 其中本金:3488.73 利息:289.18 累计已还本金:134636.54
2007-11 本月应还:3777.91 其中本金:3503.39 利息:274.53 累计已还本金:138139.92
2007-12 本月应还:3777.91 其中本金:3518.1 利息:259.81 累计已还本金:141658.02
2008-01 本月应还:3777.91 其中本金:3532.88 利息:245.04 累计已还本金:145190.9
2008-02 本月应还:3777.91 其中本金:3547.71 利息:230.2 累计已还本金:148738.61
2008-03 本月应还:3777.91 其中本金:3562.62 利息:215.3 累计已还本金:152301.23
2008-04 本月应还:3777.91 其中本金:3577.58 利息:200.33 累计已还本金:155878.81
2008-05 本月应还:3777.91 其中本金:3592.6 利息:185.31 累计已还本金:159471.41
2008-06 本月应还:3777.91 其中本金:3607.69 利息:170.22 累计已还本金:163079.1
2008-07 本月应还:3777.91 其中本金:3622.85 利息:155.07 累计已还本金:166701.95
2008-08 本月应还:3777.91 其中本金:3638.06 利息:139.85 累计已还本金:170340.01
2008-09 本月应还:3777.91 其中本金:3653.34 利息:124.57 累计已还本金:173993.35
2008-10 本月应还:3777.91 其中本金:3668.69 利息:109.23 累计已还本金:177662.04
2008-11 本月应还:3777.91 其中本金:3684.09 利息:93.82 累计已还本金:181346.13
2008-12 本月应还:3777.91 其中本金:3699.57 利息:78.35 累计已还本金:185045.7
2009-01 本月应还:3777.91 其中本金:3715.1 利息:62.81 累计已还本金:188760.8
2009-02 本月应还:3777.91 其中本金:3730.71 利息:47.2 累计已还本金:192491.51
2009-03 本月应还:3777.91 其中本金:3746.38 利息:31.54 累计已还本金:196237.89
2009-04 本月应还:3777.91 其中本金:3762.11 利息:15.8 累计已还本金:200000
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_CHANGE_RATE(TO_DATE('2005-1', 'YYYY-MM'), 0.0531)
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_REPORT
贷款总额: 200000
贷款年限: 5
还贷开始日期: 2004-05
2004-05 本月应还:3777.91 其中本金:2937.91 利息:840 累计已还本金:2937.91
2004-06 本月应还:3777.91 其中本金:2950.25 利息:827.66 累计已还本金:5888.17
2004-07 本月应还:3777.91 其中本金:2962.64 利息:815.27 累计已还本金:8850.81
2004-08 本月应还:3777.91 其中本金:2975.09 利息:802.83 累计已还本金:11825.89
2004-09 本月应还:3777.91 其中本金:2987.58 利息:790.33 累计已还本金:14813.48
2004-10 本月应还:3777.91 其中本金:3000.13 利息:777.78 累计已还本金:17813.61
2004-11 本月应还:3777.91 其中本金:3012.73 利息:765.18 累计已还本金:20826.34
2004-12 本月应还:3777.91 其中本金:3025.38 利息:752.53 累计已还本金:23851.72
2005-01 本月应还:3799.58 其中本金:3020.13 利息:779.46 累计已还本金:26871.85
2005-02 本月应还:3799.58 其中本金:3033.49 利息:766.09 累计已还本金:29905.34
2005-03 本月应还:3799.58 其中本金:3046.92 利息:752.67 累计已还本金:32952.26
2005-04 本月应还:3799.58 其中本金:3060.4 利息:739.19 累计已还本金:36012.65
2005-05 本月应还:3799.58 其中本金:3073.94 利息:725.64 累计已还本金:39086.59
2005-06 本月应还:3799.58 其中本金:3087.54 利息:712.04 累计已还本金:42174.14
2005-07 本月应还:3799.58 其中本金:3101.2 利息:698.38 累计已还本金:45275.34
2005-08 本月应还:3799.58 其中本金:3114.93 利息:684.66 累计已还本金:48390.27
2005-09 本月应还:3799.58 其中本金:3128.71 利息:670.87 累计已还本金:51518.98
2005-10 本月应还:3799.58 其中本金:3142.56 利息:657.03 累计已还本金:54661.54
2005-11 本月应还:3799.58 其中本金:3156.46 利息:643.12 累计已还本金:57818
2005-12 本月应还:3799.58 其中本金:3170.43 利息:629.16 累计已还本金:60988.43
2006-01 本月应还:3799.58 其中本金:3184.46 利息:615.13 累计已还本金:64172.88
2006-02 本月应还:3799.58 其中本金:3198.55 利息:601.03 累计已还本金:67371.43
2006-03 本月应还:3799.58 其中本金:3212.7 利息:586.88 累计已还本金:70584.14
2006-04 本月应还:3799.58 其中本金:3226.92 利息:572.67 累计已还本金:73811.06
2006-05 本月应还:3799.58 其中本金:3241.2 利息:558.39 累计已还本金:77052.25
2006-06 本月应还:3799.58 其中本金:3255.54 利息:544.04 累计已还本金:80307.79
2006-07 本月应还:3799.58 其中本金:3269.95 利息:529.64 累计已还本金:83577.74
2006-08 本月应还:3799.58 其中本金:3284.42 利息:515.17 累计已还本金:86862.16
2006-09 本月应还:3799.58 其中本金:3298.95 利息:500.63 累计已还本金:90161.11
2006-10 本月应还:3799.58 其中本金:3313.55 利息:486.04 累计已还本金:93474.65
2006-11 本月应还:3799.58 其中本金:3328.21 利息:471.37 累计已还本金:96802.86
2006-12 本月应还:3799.58 其中本金:3342.94 利息:456.65 累计已还本金:100145.8
2007-01 本月应还:3799.58 其中本金:3357.73 利息:441.85 累计已还本金:103503.53
2007-02 本月应还:3799.58 其中本金:3372.59 利息:427 累计已还本金:106876.12
2007-03 本月应还:3799.58 其中本金:3387.51 利息:412.07 累计已还本金:110263.63
2007-04 本月应还:3799.58 其中本金:3402.5 利息:397.08 累计已还本金:113666.13
2007-05 本月应还:3799.58 其中本金:3417.56 利息:382.03 累计已还本金:117083.68
2007-06 本月应还:3799.58 其中本金:3432.68 利息:366.9 累计已还本金:120516.36
2007-07 本月应还:3799.58 其中本金:3447.87 利息:351.72 累计已还本金:123964.23
2007-08 本月应还:3799.58 其中本金:3463.13 利息:336.46 累计已还本金:127427.36
2007-09 本月应还:3799.58 其中本金:3478.45 利息:321.13 累计已还本金:130905.81
2007-10 本月应还:3799.58 其中本金:3493.84 利息:305.74 累计已还本金:134399.65
2007-11 本月应还:3799.58 其中本金:3509.3 利息:290.28 累计已还本金:137908.95
2007-12 本月应还:3799.58 其中本金:3524.83 利息:274.75 累计已还本金:141433.79
2008-01 本月应还:3799.58 其中本金:3540.43 利息:259.16 累计已还本金:144974.22
2008-02 本月应还:3799.58 其中本金:3556.1 利息:243.49 累计已还本金:148530.31
2008-03 本月应还:3799.58 其中本金:3571.83 利息:227.75 累计已还本金:152102.14
2008-04 本月应还:3799.58 其中本金:3587.64 利息:211.95 累计已还本金:155689.78
2008-05 本月应还:3799.58 其中本金:3603.51 利息:196.07 累计已还本金:159293.29
2008-06 本月应还:3799.58 其中本金:3619.46 利息:180.13 累计已还本金:162912.75
2008-07 本月应还:3799.58 其中本金:3635.47 利息:164.11 累计已还本金:166548.22
2008-08 本月应还:3799.58 其中本金:3651.56 利息:148.02 累计已还本金:170199.78
2008-09 本月应还:3799.58 其中本金:3667.72 利息:131.87 累计已还本金:173867.5
2008-10 本月应还:3799.58 其中本金:3683.95 利息:115.64 累计已还本金:177551.45
2008-11 本月应还:3799.58 其中本金:3700.25 利息:99.33 累计已还本金:181251.7
2008-12 本月应还:3799.58 其中本金:3716.62 利息:82.96 累计已还本金:184968.32
2009-01 本月应还:3799.58 其中本金:3733.07 利息:66.52 累计已还本金:188701.39
2009-02 本月应还:3799.58 其中本金:3749.59 利息:50 累计已还本金:192450.97
2009-03 本月应还:3799.58 其中本金:3766.18 利息:33.4 累计已还本金:196217.15
2009-04 本月应还:3799.58 其中本金:3782.85 利息:16.74 累计已还本金:200000
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_PAY_AHEAD(TO_DATE('2005-8', 'YYYY-MM'), 100000)
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_REPORT
贷款总额: 200000
贷款年限: 5
还贷开始日期: 2004-05
2004-05 本月应还:3777.91 其中本金:2937.91 利息:840 累计已还本金:2937.91
2004-06 本月应还:3777.91 其中本金:2950.25 利息:827.66 累计已还本金:5888.17
2004-07 本月应还:3777.91 其中本金:2962.64 利息:815.27 累计已还本金:8850.81
2004-08 本月应还:3777.91 其中本金:2975.09 利息:802.83 累计已还本金:11825.89
2004-09 本月应还:3777.91 其中本金:2987.58 利息:790.33 累计已还本金:14813.48
2004-10 本月应还:3777.91 其中本金:3000.13 利息:777.78 累计已还本金:17813.61
2004-11 本月应还:3777.91 其中本金:3012.73 利息:765.18 累计已还本金:20826.34
2004-12 本月应还:3777.91 其中本金:3025.38 利息:752.53 累计已还本金:23851.72
2005-01 本月应还:3799.58 其中本金:3020.13 利息:779.46 累计已还本金:26871.85
2005-02 本月应还:3799.58 其中本金:3033.49 利息:766.09 累计已还本金:29905.34
2005-03 本月应还:3799.58 其中本金:3046.92 利息:752.67 累计已还本金:32952.26
2005-04 本月应还:3799.58 其中本金:3060.4 利息:739.19 累计已还本金:36012.65
2005-05 本月应还:3799.58 其中本金:3073.94 利息:725.64 累计已还本金:39086.59
2005-06 本月应还:3799.58 其中本金:3087.54 利息:712.04 累计已还本金:42174.14
2005-07 本月应还:3799.58 其中本金:3101.2 利息:698.38 累计已还本金:145275.34
2005-08 本月应还:1343.88 其中本金:1101.72 利息:242.16 累计已还本金:146377.06
2005-09 本月应还:1343.88 其中本金:1106.6 利息:237.28 累计已还本金:147483.66
2005-10 本月应还:1343.88 其中本金:1111.49 利息:232.38 累计已还本金:148595.15
2005-11 本月应还:1343.88 其中本金:1116.41 利息:227.47 累计已还本金:149711.56
2005-12 本月应还:1343.88 其中本金:1121.35 利息:222.53 累计已还本金:150832.91
2006-01 本月应还:1343.88 其中本金:1126.31 利息:217.56 累计已还本金:151959.22
2006-02 本月应还:1343.88 其中本金:1131.3 利息:212.58 累计已还本金:153090.52
2006-03 本月应还:1343.88 其中本金:1136.3 利息:207.57 累计已还本金:154226.82
2006-04 本月应还:1343.88 其中本金:1141.33 利息:202.55 累计已还本金:155368.16
2006-05 本月应还:1343.88 其中本金:1146.38 利息:197.5 累计已还本金:156514.54
2006-06 本月应还:1343.88 其中本金:1151.45 利息:192.42 累计已还本金:157665.99
2006-07 本月应还:1343.88 其中本金:1156.55 利息:187.33 累计已还本金:158822.54
2006-08 本月应还:1343.88 其中本金:1161.67 利息:182.21 累计已还本金:159984.21
2006-09 本月应还:1343.88 其中本金:1166.81 利息:177.07 累计已还本金:161151.01
2006-10 本月应还:1343.88 其中本金:1171.97 利息:171.91 累计已还本金:162322.98
2006-11 本月应还:1343.88 其中本金:1177.16 利息:166.72 累计已还本金:163500.14
2006-12 本月应还:1343.88 其中本金:1182.37 利息:161.51 累计已还本金:164682.51
2007-01 本月应还:1343.88 其中本金:1187.6 利息:156.28 累计已还本金:165870.1
2007-02 本月应还:1343.88 其中本金:1192.85 利息:151.02 累计已还本金:167062.96
2007-03 本月应还:1343.88 其中本金:1198.13 利息:145.75 累计已还本金:168261.09
2007-04 本月应还:1343.88 其中本金:1203.43 利息:140.44 累计已还本金:169464.52
2007-05 本月应还:1343.88 其中本金:1208.76 利息:135.12 累计已还本金:170673.28
2007-06 本月应还:1343.88 其中本金:1214.11 利息:129.77 累计已还本金:171887.38
2007-07 本月应还:1343.88 其中本金:1219.48 利息:124.4 累计已还本金:173106.86
2007-08 本月应还:1343.88 其中本金:1224.88 利息:119 累计已还本金:174331.74
2007-09 本月应还:1343.88 其中本金:1230.3 利息:113.58 累计已还本金:175562.03
2007-10 本月应还:1343.88 其中本金:1235.74 利息:108.14 累计已还本金:176797.77
2007-11 本月应还:1343.88 其中本金:1241.21 利息:102.67 累计已还本金:178038.98
2007-12 本月应还:1343.88 其中本金:1246.7 利息:97.18 累计已还本金:179285.68
2008-01 本月应还:1343.88 其中本金:1252.22 利息:91.66 累计已还本金:180537.9
2008-02 本月应还:1343.88 其中本金:1257.76 利息:86.12 累计已还本金:181795.65
2008-03 本月应还:1343.88 其中本金:1263.32 利息:80.55 累计已还本金:183058.98
2008-04 本月应还:1343.88 其中本金:1268.91 利息:74.96 累计已还本金:184327.89
2008-05 本月应还:1343.88 其中本金:1274.53 利息:69.35 累计已还本金:185602.42
2008-06 本月应还:1343.88 其中本金:1280.17 利息:63.71 累计已还本金:186882.59
2008-07 本月应还:1343.88 其中本金:1285.83 利息:58.04 累计已还本金:188168.42
2008-08 本月应还:1343.88 其中本金:1291.52 利息:52.35 累计已还本金:189459.94
2008-09 本月应还:1343.88 其中本金:1297.24 利息:46.64 累计已还本金:190757.18
2008-10 本月应还:1343.88 其中本金:1302.98 利息:40.9 累计已还本金:192060.16
2008-11 本月应还:1343.88 其中本金:1308.74 利息:35.13 累计已还本金:193368.9
2008-12 本月应还:1343.88 其中本金:1314.53 利息:29.34 累计已还本金:194683.44
2009-01 本月应还:1343.88 其中本金:1320.35 利息:23.53 累计已还本金:196003.79
2009-02 本月应还:1343.88 其中本金:1326.19 利息:17.68 累计已还本金:197329.98
2009-03 本月应还:1343.88 其中本金:1332.06 利息:11.81 累计已还本金:198662.04
2009-04 本月应还:1343.88 其中本金:1337.96 利息:5.92 累计已还本金:200000
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_CHANGE_RATE(TO_DATE('2006-1', 'YYYY-MM'), 0.0551)
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_REPORT
贷款总额: 200000
贷款年限: 5
还贷开始日期: 2004-05
2004-05 本月应还:3777.91 其中本金:2937.91 利息:840 累计已还本金:2937.91
2004-06 本月应还:3777.91 其中本金:2950.25 利息:827.66 累计已还本金:5888.17
2004-07 本月应还:3777.91 其中本金:2962.64 利息:815.27 累计已还本金:8850.81
2004-08 本月应还:3777.91 其中本金:2975.09 利息:802.83 累计已还本金:11825.89
2004-09 本月应还:3777.91 其中本金:2987.58 利息:790.33 累计已还本金:14813.48
2004-10 本月应还:3777.91 其中本金:3000.13 利息:777.78 累计已还本金:17813.61
2004-11 本月应还:3777.91 其中本金:3012.73 利息:765.18 累计已还本金:20826.34
2004-12 本月应还:3777.91 其中本金:3025.38 利息:752.53 累计已还本金:23851.72
2005-01 本月应还:3799.58 其中本金:3020.13 利息:779.46 累计已还本金:26871.85
2005-02 本月应还:3799.58 其中本金:3033.49 利息:766.09 累计已还本金:29905.34
2005-03 本月应还:3799.58 其中本金:3046.92 利息:752.67 累计已还本金:32952.26
2005-04 本月应还:3799.58 其中本金:3060.4 利息:739.19 累计已还本金:36012.65
2005-05 本月应还:3799.58 其中本金:3073.94 利息:725.64 累计已还本金:39086.59
2005-06 本月应还:3799.58 其中本金:3087.54 利息:712.04 累计已还本金:42174.14
2005-07 本月应还:3799.58 其中本金:3101.2 利息:698.38 累计已还本金:145275.34
2005-08 本月应还:1343.88 其中本金:1101.72 利息:242.16 累计已还本金:146377.06
2005-09 本月应还:1343.88 其中本金:1106.6 利息:237.28 累计已还本金:147483.66
2005-10 本月应还:1343.88 其中本金:1111.49 利息:232.38 累计已还本金:148595.15
2005-11 本月应还:1343.88 其中本金:1116.41 利息:227.47 累计已还本金:149711.56
2005-12 本月应还:1343.88 其中本金:1121.35 利息:222.53 累计已还本金:150832.91
2006-01 本月应还:1348.32 其中本金:1122.56 利息:225.76 累计已还本金:151955.47
2006-02 本月应还:1348.32 其中本金:1127.72 利息:220.6 累计已还本金:153083.19
2006-03 本月应还:1348.32 其中本金:1132.9 利息:215.43 累计已还本金:154216.09
2006-04 本月应还:1348.32 其中本金:1138.1 利息:210.22 累计已还本金:155354.19
2006-05 本月应还:1348.32 其中本金:1143.32 利息:205 累计已还本金:156497.51
2006-06 本月应还:1348.32 其中本金:1148.57 利息:199.75 累计已还本金:157646.08
2006-07 本月应还:1348.32 其中本金:1153.85 利息:194.48 累计已还本金:158799.93
2006-08 本月应还:1348.32 其中本金:1159.15 利息:189.18 累计已还本金:159959.07
2006-09 本月应还:1348.32 其中本金:1164.47 利息:183.85 累计已还本金:161123.54
2006-10 本月应还:1348.32 其中本金:1169.81 利息:178.51 累计已还本金:162293.36
2006-11 本月应还:1348.32 其中本金:1175.19 利息:173.14 累计已还本金:163468.54
2006-12 本月应还:1348.32 其中本金:1180.58 利息:167.74 累计已还本金:164649.12
2007-01 本月应还:1348.32 其中本金:1186 利息:162.32 累计已还本金:165835.13
2007-02 本月应还:1348.32 其中本金:1191.45 利息:156.87 累计已还本金:167026.57
2007-03 本月应还:1348.32 其中本金:1196.92 利息:151.4 累计已还本金:168223.49
2007-04 本月应还:1348.32 其中本金:1202.41 利息:145.91 累计已还本金:169425.91
2007-05 本月应还:1348.32 其中本金:1207.94 利息:140.39 累计已还本金:170633.84
2007-06 本月应还:1348.32 其中本金:1213.48 利息:134.84 累计已还本金:171847.33
2007-07 本月应还:1348.32 其中本金:1219.05 利息:129.27 累计已还本金:173066.38
2007-08 本月应还:1348.32 其中本金:1224.65 利息:123.67 累计已还本金:174291.03
2007-09 本月应还:1348.32 其中本金:1230.27 利息:118.05 累计已还本金:175521.31
2007-10 本月应还:1348.32 其中本金:1235.92 利息:112.4 累计已还本金:176757.23
2007-11 本月应还:1348.32 其中本金:1241.6 利息:106.72 累计已还本金:177998.83
2007-12 本月应还:1348.32 其中本金:1247.3 利息:101.02 累计已还本金:179246.13
2008-01 本月应还:1348.32 其中本金:1253.03 利息:95.29 累计已还本金:180499.16
2008-02 本月应还:1348.32 其中本金:1258.78 利息:89.54 累计已还本金:181757.94
2008-03 本月应还:1348.32 其中本金:1264.56 利息:83.76 累计已还本金:183022.5
2008-04 本月应还:1348.32 其中本金:1270.37 利息:77.96 累计已还本金:184292.87
2008-05 本月应还:1348.32 其中本金:1276.2 利息:72.12 累计已还本金:185569.07
2008-06 本月应还:1348.32 其中本金:1282.06 利息:66.26 累计已还本金:186851.13
2008-07 本月应还:1348.32 其中本金:1287.95 利息:60.38 累计已还本金:188139.07
2008-08 本月应还:1348.32 其中本金:1293.86 利息:54.46 累计已还本金:189432.93
2008-09 本月应还:1348.32 其中本金:1299.8 利息:48.52 累计已还本金:190732.73
2008-10 本月应还:1348.32 其中本金:1305.77 利息:42.55 累计已还本金:192038.5
2008-11 本月应还:1348.32 其中本金:1311.77 利息:36.56 累计已还本金:193350.27
2008-12 本月应还:1348.32 其中本金:1317.79 利息:30.53 累计已还本金:194668.06
2009-01 本月应还:1348.32 其中本金:1323.84 利息:24.48 累计已还本金:195991.9
2009-02 本月应还:1348.32 其中本金:1329.92 利息:18.4 累计已还本金:197321.82
2009-03 本月应还:1348.32 其中本金:1336.02 利息:12.3 累计已还本金:198657.84
2009-04 本月应还:1348.32 其中本金:1342.16 利息:6.16 累计已还本金:200000
PL/SQL 过程已成功完成。
在重新计算之前,需要清除原有数据:
SQL> EXEC P_PAY_MONTHLY.P_CLEAR
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_SET_INITIAL(200000, 5, TO_DATE('2004-5', 'YYYY-MM'), 0.0504, 0)
PL/SQL 过程已成功完成。
SQL> EXEC P_PAY_MONTHLY.P_REPORT
贷款总额: 200000
贷款年限: 5
还贷开始日期: 2004-05
2004-05 本月应还:4173.33 其中本金:3333.33 利息:840 累计已还本金:3333.33
2004-06 本月应还:4159.33 其中本金:3333.33 利息:826 累计已还本金:6666.67
2004-07 本月应还:4145.33 其中本金:3333.33 利息:812 累计已还本金:10000
2004-08 本月应还:4131.33 其中本金:3333.33 利息:798 累计已还本金:13333.33
2004-09 本月应还:4117.33 其中本金:3333.33 利息:784 累计已还本金:16666.67
2004-10 本月应还:4103.33 其中本金:3333.33 利息:770 累计已还本金:20000
2004-11 本月应还:4089.33 其中本金:3333.33 利息:756 累计已还本金:23333.33
2004-12 本月应还:4075.33 其中本金:3333.33 利息:742 累计已还本金:26666.67
2005-01 本月应还:4061.33 其中本金:3333.33 利息:728 累计已还本金:30000
2005-02 本月应还:4047.33 其中本金:3333.33 利息:714 累计已还本金:33333.33
2005-03 本月应还:4033.33 其中本金:3333.33 利息:700 累计已还本金:36666.67
2005-04 本月应还:4019.33 其中本金:3333.33 利息:686 累计已还本金:40000
2005-05 本月应还:4005.33 其中本金:3333.33 利息:672 累计已还本金:43333.33
2005-06 本月应还:3991.33 其中本金:3333.33 利息:658 累计已还本金:46666.67
2005-07 本月应还:3977.33 其中本金:3333.33 利息:644 累计已还本金:50000
2005-08 本月应还:3963.33 其中本金:3333.33 利息:630 累计已还本金:53333.33
2005-09 本月应还:3949.33 其中本金:3333.33 利息:616 累计已还本金:56666.67
2005-10 本月应还:3935.33 其中本金:3333.33 利息:602 累计已还本金:60000
2005-11 本月应还:3921.33 其中本金:3333.33 利息:588 累计已还本金:63333.33
2005-12 本月应还:3907.33 其中本金:3333.33 利息:574 累计已还本金:66666.67
2006-01 本月应还:3893.33 其中本金:3333.33 利息:560 累计已还本金:70000
2006-02 本月应还:3879.33 其中本金:3333.33 利息:546 累计已还本金:73333.33
2006-03 本月应还:3865.33 其中本金:3333.33 利息:532 累计已还本金:76666.67
2006-04 本月应还:3851.33 其中本金:3333.33 利息:518 累计已还本金:80000
2006-05 本月应还:3837.33 其中本金:3333.33 利息:504 累计已还本金:83333.33
2006-06 本月应还:3823.33 其中本金:3333.33 利息:490 累计已还本金:86666.67
2006-07 本月应还:3809.33 其中本金:3333.33 利息:476 累计已还本金:90000
2006-08 本月应还:3795.33 其中本金:3333.33 利息:462 累计已还本金:93333.33
2006-09 本月应还:3781.33 其中本金:3333.33 利息:448 累计已还本金:96666.67
2006-10 本月应还:3767.33 其中本金:3333.33 利息:434 累计已还本金:100000
2006-11 本月应还:3753.33 其中本金:3333.33 利息:420 累计已还本金:103333.33
2006-12 本月应还:3739.33 其中本金:3333.33 利息:406 累计已还本金:106666.67
2007-01 本月应还:3725.33 其中本金:3333.33 利息:392 累计已还本金:110000
2007-02 本月应还:3711.33 其中本金:3333.33 利息:378 累计已还本金:113333.33
2007-03 本月应还:3697.33 其中本金:3333.33 利息:364 累计已还本金:116666.67
2007-04 本月应还:3683.33 其中本金:3333.33 利息:350 累计已还本金:120000
2007-05 本月应还:3669.33 其中本金:3333.33 利息:336 累计已还本金:123333.33
2007-06 本月应还:3655.33 其中本金:3333.33 利息:322 累计已还本金:126666.67
2007-07 本月应还:3641.33 其中本金:3333.33 利息:308 累计已还本金:130000
2007-08 本月应还:3627.33 其中本金:3333.33 利息:294 累计已还本金:133333.33
2007-09 本月应还:3613.33 其中本金:3333.33 利息:280 累计已还本金:136666.67
2007-10 本月应还:3599.33 其中本金:3333.33 利息:266 累计已还本金:140000
2007-11 本月应还:3585.33 其中本金:3333.33 利息:252 累计已还本金:143333.33
2007-12 本月应还:3571.33 其中本金:3333.33 利息:238 累计已还本金:146666.67
2008-01 本月应还:3557.33 其中本金:3333.33 利息:224 累计已还本金:150000
2008-02 本月应还:3543.33 其中本金:3333.33 利息:210 累计已还本金:153333.33
2008-03 本月应还:3529.33 其中本金:3333.33 利息:196 累计已还本金:156666.67
2008-04 本月应还:3515.33 其中本金:3333.33 利息:182 累计已还本金:160000
2008-05 本月应还:3501.33 其中本金:3333.33 利息:168 累计已还本金:163333.33
2008-06 本月应还:3487.33 其中本金:3333.33 利息:154 累计已还本金:166666.67
2008-07 本月应还:3473.33 其中本金:3333.33 利息:140 累计已还本金:170000
2008-08 本月应还:3459.33 其中本金:3333.33 利息:126 累计已还本金:173333.33
2008-09 本月应还:3445.33 其中本金:3333.33 利息:112 累计已还本金:176666.67
2008-10 本月应还:3431.33 其中本金:3333.33 利息:98 累计已还本金:180000
2008-11 本月应还:3417.33 其中本金:3333.33 利息:84 累计已还本金:183333.33
2008-12 本月应还:3403.33 其中本金:3333.33 利息:70 累计已还本金:186666.67
2009-01 本月应还:3389.33 其中本金:3333.33 利息:56 累计已还本金:190000
2009-02 本月应还:3375.33 其中本金:3333.33 利息:42 累计已还本金:193333.33
2009-03 本月应还:3361.33 其中本金:3333.33 利息:28 累计已还本金:196666.67
2009-04 本月应还:3347.33 其中本金:3333.33 利息:14 累计已还本金:200000
PL/SQL 过程已成功完成。











