写一个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. 微信小程序app.json配置

    找到app.json文件,找到window配置项 1.windows选项下导航栏样式 "navigationBarBackgroundColor":#F6F6F6 // 导航栏的背 ...

  2. C# 结构(struct)的特点

    1.C# 中的结构有以下特点: 结构可带有方法.字段.索引.属性.运算符方法和事件. 结构可定义构造函数,但不能定义析构函数.但是,您不能为结构定义默认的构造函数.默认的构造函数是自动定义的,且不能被 ...

  3. c# radiobutton

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  4. 1.8.3suspend与resume方法的缺点--不同步

    package com.cky.bean; /** * Created by edison on 2017/12/3. */ public class MyObject { private Strin ...

  5. 20145232 韩文浩 《Java程序设计》第1周学习总结

    教材学习内容总结 看到已经有人学到了第四章,真是_(:з」∠)_ 于是我也开始了我的Java之旅. 首先学习了几常见的dos命令行方式 dir: 列出当前目录下所有文件及文件夹 md :创建目录 rd ...

  6. day26(分页查询)

    分页查询思路 问题: 服务器向浏览器想用数据很多的时候可以对数据进行封装. domain层  封装数据 package com.baidu.domain; import java.util.List; ...

  7. HDU 2546 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 经典的01背包 预留5元买最贵的,剩余的就是01背包. #include<stdio.h> # ...

  8. nodeclub config

    配置文件,本来想着分成好几个文件,放在一个文件夹中,后来觉得也没必要,原因是,配置文件看一遍也就记住了,分开反而显得繁琐,注释写清楚就好. // 路径模块 var path = require('pa ...

  9. Spring 使用javaconfig配置

    除了使用xml,spring提供javaconfig配置,下面是简单的例子: 1.声明接口 /** * */ package com.junge.demo.spring.service; /** * ...

  10. 杂谈--SQL SERVER版本

    SQL SERVER 内部版本号: SQL   Server Version Internal Database Version SQL Server 2014 782 SQL Server 2012 ...