写一个MySql存储过程实现房贷等额本息还款计算

MySql存储过程代码如下:

	DROP procedure IF EXISTS `calc_equal_interest_proc`;
DELIMITER $$
#USE `fn`$$
CREATE PROCEDURE `calc_equal_interest_proc` (khbh varchar(50))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '等额本息计算'
BEGIN
declare khf0059 varchar(100); #客户产品编号
declare khf0067 varchar(100); #产品产品模板编号
declare vtkf0007 datetime; #提款日期 declare cpf0026 decimal(18,8) default 0.0; #产品金额
declare cpf0027 int default 0; #产品周期
declare cpf0028 decimal(18,8) default 0.0; #产品总利息
declare cpf0029 decimal(18,8) default 0.0; #产品银行利息
declare cpf0030 decimal(18,8) default 0.0; #产品风险金池
declare cpf0031 decimal(18,8) default 0.0; #产品科技及获客
declare cpf0038 int default 0; #产品等额本息是否计算是否足月
declare hky datetime; declare i int default 0; declare corpusLeft decimal(18,8) default 0.0; #等额还款之本金
declare corpusLeftMon decimal(18,8) default 0.0; #等额还款之剩余本金
declare ratePow decimal(18,8) default 0.0; #每期贷款利率
declare capMon decimal(18,8) default 0.0; #月供
declare varerestMon decimal(18,8) default 0.0; #月供利息
declare corpusMon decimal(18,8) default 0.0; #月供本金
declare capTotle decimal(18,8) default 0.0; #还款总额
declare varerestTotle decimal(18,8) default 0.0; #利息总额
declare corpusTotle decimal(18,8) default 0.0; #利息总额
declare re int default 0; #set cpf0026,cpf0027 = (select ifnull(f0026,0),ifnull(f0027,0) from t0003 where f0002=vtkf0003 limit 0,1);
select f0059,f0067 into khf0059,khf0067 from t0002 where f0027=khbh limit 0,1;
select ifnull(f0026,0),ifnull(f0027,0),ifnull(f0028,0),ifnull(f0029,0),ifnull(f0030,0),ifnull(f0031,0)
into cpf0026, cpf0027, cpf0028, cpf0029, cpf0030, cpf0031 from t0003 where f0002=(select f0059 from t0002 where f0027=khbh limit 0,1) limit 0,1; set corpusLeft = cpf0026;
set corpusLeftMon = cpf0026;
set ratePow = (select pow(cpf0028/12+1,cpf0027)); #每期贷款利率
set hky = now(); while i < cpf0027 do
set capMon=(corpusLeft*cpf0028/12*ratePow)/(ratePow-1);#月供
set varerestMon=(select convert(corpusLeftMon*cpf0028/12,decimal(18,8)));#月供利息
set corpusMon=(select convert(capMon-varerestMon,decimal(18,8)));#月供本金
set corpusLeftMon=(select convert(corpusLeftMon-corpusMon,decimal(18,8)));#本金余额
set capTotle=capTotle + capMon; #还款总额
set varerestTotle=varerestTotle + varerestMon;#利息总额
set corpusTotle= corpusTotle + corpusMon;#本金总额
set hky = (select date_format(date_add(hky,interval 1 month), '%Y-%m-20'));
#select capMon, corpusMon, varerestMon;
#select corpusLeftMon, convert(capMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(corpusMon,decimal(18,2));
#select corpusLeftMon, capMon, varerestMon, corpusMon; set hky = (select date_format(date_add(hky,interval 1 month), '%Y-%m-20'));
#select capMon, corpusMon, varerestMon;
#select corpusLeftMon, convert(capMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(corpusMon,decimal(18,2));
#select corpusLeftMon, capMon, varerestMon, corpusMon; set re = (select count(1) from t0302 where f0003=khbh and F0006=date_format(hky, '%Y-%m-20'));
if re<=0 then
insert into t0302 (f0003, f0004, f0005, f0006, f0007, f0009, f0010, f0011, f0012, f0013)
values(khbh, khf0059, khf0067, date_format(hky, '%Y-%m-20'), convert(capMon,decimal(18,2)),
convert(corpusMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(varerestMon*cpf0029/cpf0028,decimal(18,2)),
convert(varerestMon*cpf0030/cpf0028,decimal(18,2)), convert(varerestMon*cpf0031/cpf0028,decimal(18,2)));
#ON DUPLICATE KEY UPDATE f0003=khbh and F0006=date_format(hky, '%Y-%m-20');
END IF;
end while; END$$
DELIMITER ; #select * from t0302;
#call `calc_equal_interest_proc`('C20170725002');

JavaScript代码如下:

			function calculateR(rates,rateMon,corpus)//利率、期限、本金
{
var limitTime=rateMon;//贷款期限
var timeLeft=limitTime; var corpusLeft=corpus;//等额还款之本金
var corpusLeftMon=corpus;//等额还款之剩余本金 var capMon,corpusMon,varerestMon;
var capTotle=0,corpusTotle=0,varerestTotle=0; var sbResultR; var rate=rates/100/12; //sbResultR=createTable(sbResultR); for(var i=1;i<limitTime;i++)
{
var ratePow=Math.pow(rate+1,timeLeft);//每期贷款利率 capMon=(corpusLeft*rate*ratePow)/(ratePow -1);//月供
varerestMon=corpusLeftMon*rate;//月供利息
corpusMon=capMon-varerestMon;//月供本金 corpusLeftMon-=corpusMon;//本金余额
capTotle+=capMon;//还款总额
varerestTotle+=varerestMon;//利息总额
corpusTotle+=corpusMon;//本金总额 //sbResultR=output(sbResultR,i,capMon,varerestMon,corpusMon,corpusLeftMon,rate*12*100);
} ///最后一期
varerestMon=corpusLeftMon*rate;//月供利息
corpusMon=corpusLeftMon;//月供本金 capMon=varerestMon + corpusLeftMon;//月供
corpusLeftMon-=corpusMon;//本金余额
capTotle+=capMon;//还款总额
varerestTotle+=varerestMon;//利息总额
corpusTotle+=corpusMon;//本金总额 //sbResultR=output(sbResultR,limitTime,capMon,varerestMon,corpusMon,corpusLeftMon,rate*12*100); //sbResultR=output(sbResultR,9999,capTotle,varerestTotle,corpusTotle,corpusLeftMon,0);
//sbResultR=endTable(sbResultR);
//document.getElementById("res01_total").value = (Math.round(capTotle*100))/100;//还款总额
//document.getElementById("res01_ratetotal").value = (Math.round(varerestTotle*100))/100;//利息总额
//return sbResultR;
} calculateR(15, 15, 1000000);

写一个MySql存储过程实现房贷等额本息还款计算(另外附javascript代码)的更多相关文章

  1. 第一个MySQL 存储过程

    昨天写了人生第一个mysql存储过程:遗憾的是,这个存储过程最后还是没用上,用php代码替代 话说mysql的存储过程真是反人类,不查reference,基本不能看懂那些语句:语言中能和它相比的,只有 ...

  2. MySql存储过程—2、第一个MySql存储过程的建立

    看看如何创建一个存储过程.虽然通过命令行可以创建,但基本通过MySQL提供的Query browser来创建. 1.首先我们通过Administrator在test数据库中创建一个简单的表名叫”pro ...

  3. Python-编写一个mysql注入漏洞检测工具

    判断mysql网站是否存在注入漏洞的几个方法: 注入点后加上一个单引号会报错 and 1=1返回正常页面,and 1=2返回的页面不同于正常页面 and sleep(3) 网页会等待3秒左右 根据返回 ...

  4. MySQL存储过程(转)

    一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...

  5. mysql存储过程之游标遍历数据表

    原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...

  6. mysql存储过程 基本语法

    话不多说 一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b& ...

  7. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. mysql存储过程详细教程

    记录mysql存储过程中的关键语法:DELIMITER //  声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int)  声明存储过程 ...

  9. Mysql存储过程总结

    1.     关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...

随机推荐

  1. PHP continue break 区别 用法

    <?php //continue 跳过当前循环,进行下一个 //break 终止当前循环 $db=new PDO("mysql:host=localhost;dbname=root&q ...

  2. VS2013利用ajax访问不了json文件——VS2013配置webconfig识别json文件

    这两天用VS2013开发工具来访问json文件,老是报404文件,我根据网上来设置IIS添加MIME重启IIS和VS2013还是失败,无法访问json文件,但是奇怪的是可以访问txt文件 查询了很多方 ...

  3. Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql'

    Mac OS X的升级或其他原因可能会导致MySQL启动或开机自动运行时   在MySQL操作面板上会提示“Warning:The /usr/local/mysql/data directory is ...

  4. Java理论学时第二节。课后作业。

    枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象,相同的值则引用同一个对象. 可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals ...

  5. Codeforces Round #540 (Div. 3)--1118B - Tanya and Candies(easy TL!)

    Tanya has nn candies numbered from 11 to nn. The ii-th candy has the weight aiai. She plans to eat e ...

  6. Digital Roots—HDU1013 2016-05-06 10:25 85人阅读 评论(0) 收藏

    Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. JMS学习以及jms的实现activeMq

    1.JMS规范介绍: http://www.cnblogs.com/hapjin/p/5431706.html http://elim.iteye.com/blog/1893038 http://bl ...

  8. Jmeter录制badboy

    一般自己手动的设置JMeter会比较麻烦,如果一边操作页面,提交表单,一边能够自动生成JMeter的脚本,则非常方便: BadBoy:录制JMeter脚本: Donwload URL:http://w ...

  9. XML Publisher 并发程序由于"输出提交处理程序提交失败

    http://www.cnblogs.com/benio/archive/2012/03/30/2424900.html xmlp 报表运行完成后,状态为warning,其原因大概有以下3类:1.&q ...

  10. linux中yum命令的解析

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...