写一个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. Basic Router Architecture

    from the book principles and practices of interconnection networks  the chapter router architecture ...

  2. vue中的路由独享守卫的理解

    1.vue中路由独享守卫意思就是对这个路由有一个单独的守卫,因为他的守卫方式于其他的凡是不太同 独享守卫于前置守卫使用方法大致是一样的 在路由配置的时候进行配置, { path:'/login', c ...

  3. 如何制作chm文件

    本文介绍如何从一个包中的docs文档生成一个chm文档. 1,准备软件Easy CHM 这个网上有下载,下载后安装,至于怎么使用,等下再介绍.安装之后如下图. 2,准备文件 比如我这里下载了一个cxf ...

  4. Java交流分享(522818473)

    今天来分享哈自己的技术交流群,记得还是刚接触Java建立的群,那时候学习Java很有动力,经常和群友谈论问题,现在都专注公司业务和技术这一块,很多后端框架都没用除了restful,其他都是封装的,不过 ...

  5. Redis的appendfsync参数详解

    redis.conf中的appendfysnc是对redis性能有重要影响的参数之一.可取三种值:always.everysec和no. 设置为always时,会极大消弱Redis的性能,因为这种模式 ...

  6. leaflet入门(二)GeoJson

    GeoJson格式数据的形式 Using GeoJSON with Leaflet GeoJSON is becoming a very popular data format among many ...

  7. MATLAB拟合正态分布

    clear;clc;close all format compact %% 正态分布的拟合 % 生成随机数 num = 50; y = randn(1000,1); x = 1:num; y = hi ...

  8. kepware http接口 GO语言开发

    读取某变量的值 package main import ( "fmt" "net/http" "io/ioutil" ) func main ...

  9. 引用数据类型(Scanner类、Random类)

    Scanner类 Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固 ...

  10. spark图解

    导语 spark 已经成为广告.报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到大家的青睐,我自己最近半年在接触spark以及spark streaming之后,对spa ...