drop procedure if exists sp_statis_subject_mouth;
CREATE PROCEDURE sp_statis_subject_mouth(IN month int)
begin
/**科目id**/
DECLARE _uid decimal(19,0);
/**借总额**/
DECLARE _addTotalMoney decimal(19,4);
/**贷总额**/
DECLARE _reduceTotalMoney decimal(19,4);
/** 余额 **/
DECLARE _totalMoney decimal(19,4);
/** 开始时间 **/
DECLARE _startTime datetime;
/** 结束时间 **/
DECLARE _endTime datetime;
/** 按月份 计算开始时间,结束时间 **/
/** 年份 **/
Declare _year int;
/**开始日期**/
Declare startDayStr varchar(50);
/**结束日期**/
Declare endDayStr varchar(50);
DECLARE no_more_departments INT DEFAULT 0;
/**遍历所有的科目 **/
declare baseInfoCur CURSOR FOR
select uid from bas_base_info;
/** 如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句全部去掉 **/
declare exit handler for sqlexception rollback;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
SET no_more_departments=0;
set _year = DATE_FORMAT(now(),'%Y');
set _startTime = STR_TO_DATE(concat(_year,'-',month,'-1'),'%Y-%m-%d');
set _endTime = STR_TO_DATE(LAST_DAY(_startTime),'%Y-%m-%d');
/** 清理原来的数据 **/
delete from FIN_ACCOUNT_SETTLEMENT where SETTLEMENT_MONTH = _startTime;
/**打开游标**/
open baseInfoCur;
/***读取游标数据***/
FETCH baseInfoCur INTO _uid;
while no_more_departments <> 1 do
/** 获取科目 借类型的总金额 **/
set _addTotalMoney = ( select sum(balance) from FIN_VOUCHER_DETAIL where IN_OR_OUT = 1 and SUBJECT_TYPE =_uid and GMT_CREATE>=_startTime and GMT_CREATE<=_endTime );
/** 获取科目 贷类型的总金额 **/
set _reduceTotalMoney = ( select sum(balance) from FIN_VOUCHER_DETAIL where IN_OR_OUT = 2 and SUBJECT_TYPE = _uid and GMT_CREATE>=_startTime and GMT_CREATE<=_endTime );
/**余额**/
set _totalMoney = _addTotalMoney - _reduceTotalMoney;
/**select _addTotalMoney,_reduceTotalMoney ,_totalMoney; **/
if _totalMoney is null then
set _totalMoney =0 ;
end if;
/** 插入到数据库中 **/
insert into FIN_ACCOUNT_SETTLEMENT (SETTLEMENT_MONTH,MONEY,STATUS,GMT_CREATE,SUBJECT_ID)
values (_startTime,_totalMoney,1,now(),_uid);
FETCH baseInfoCur INTO _uid;
end while;
CLOSE baseInfoCur;
/**运行没有异常,提交事务 **/
commit;
/** DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1; **/
end;
call sp_statis_subject_mouth(1);
select count(*) from FIN_ACCOUNT_SETTLEMENT ;
------------------------------------------------------------------------
规则 set设值操作, 都要写在declared 之后
分享到:
相关推荐
存储过程的简单介绍,通过一个具体的案例,实现了存储过程的主要写法。
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
【MySQL存储过程与函数简介】 MySQL的存储过程和函数是数据库管理中强大的工具,它们允许开发者将一组SQL语句组织在一起,形成一个可重用的模块,以执行复杂的业务逻辑。这种概念类似于高级编程语言(如Java)中的...
mysql存储过程 ,介绍mysql5.0的存储过程的写法 。。收藏一下
### 数据库存储过程的写法及连接各种数据库的方法 #### 概述 本文将详细介绍如何在不同的数据库系统中编写存储过程以及如何建立与这些数据库的连接。存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上...
MySQL存储过程是数据库编程的重要组成部分,它允许程序员封装一系列的SQL语句,形成一个可重复使用的函数或过程。存储过程可以提高数据操作的效率,并且能够更好地管理数据库逻辑。本篇文章将详细介绍两种不同类型的...
在IT领域,数据库操作是应用程序开发中的重要环节,而存储过程是数据库中预编译的SQL语句集合,可以提高数据处理效率并提供更高级的功能。本文将详细讲解如何使用Java和C#这两种广泛使用的编程语言来调用数据库中的...
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
### 使用MySQL构建健壮的数据中心 在当今数字化时代,数据已成为企业最为宝贵的资产之一。一个高效、稳定且安全的数据中心不仅能够确保业务连续性,还能为企业的数据分析与决策支持提供强有力的支持。MySQL作为全球...
"绝对惊世骇俗的SQL写法"这一标题揭示了我们即将探讨的是一些非同寻常的MySQL查询技巧,这些技巧可能挑战了常规的编程思维,能为程序员带来全新的理解和操作体验。描述中的“耗费了本人大量心血”暗示了作者在深入...
MySQL是世界上最流行的开源关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。在这个源码中,"MySql网络验证登陆注册源码 带MD5写法" 提供了一种实现用户登录注册功能的方式,它涉及到的主要知识点包括...
在实际操作中,还需要结合业务需求,灵活运用索引、存储过程、触发器等高级特性,以优化数据库性能和实现复杂的业务逻辑。记住,实践是检验理论的最好方式,所以多动手操作,不断积累经验,才能真正成为MySQL的大师...
在MySQL中,面对类似Oracle的`connect_by_isleaf`功能的需求,即查找并修改指定ID的所有子级记录,可以通过自连接、存储过程或者递归函数等方法实现。这里我们主要探讨两种MySQL的实现方式:一种是使用用户定义的...
在 C# 中,Sql Server 和 MySql 的存储过程写法有所不同。 * Sql Server: + 多个语句之间可以用 `;` 分隔,也可以不用。 + 执行动态 SQL 需要使用 `Execute` 语句。 + `Print` 语句可以打印出执行的 SQL 语句。...
然而存储过程中的写法用的就是游标的形式。 【简介】 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标充当指针的作用。 尽管游标能遍历结果中的所有行,但他一次只指向一行。 ...
而更新操作相对较弱,因为它涉及到写存储引擎日志、写MySQL的二进制日志,以及服务器和存储层的分布式事务协议。 在并发控制方面,讨论了全局锁对性能的影响,指出SYSCPU过高的问题,包括事务列表、读视图列表和锁...
在数据库管理中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以帮助我们实现复杂的业务逻辑,比如数据的一致性检查、日志记录或者同步其他相关表的数据...
在IT行业中,数据库是存储和管理数据的核心工具。在Java编程环境下,我们通常使用Java Database Connectivity (JDBC) API来与各种数据库进行交互。本文将详细介绍MySQL和Microsoft SQL Server这两种广泛应用的关系型...