报表统计-mysql存储过程
首先mysql如何创建一个存储过程:
1.创建一个日常考核的存储过程:
drop procedure if exists pr_dailycheck;
首先判断是否存在同名的存储过程,如果存在同名的存储过程,可以将同名的存储过程删除
2.创建储存过程
create PROCEDURE pr_dailycheck()
begin
select * from audit_queue_history; -- 这是一个sql语句
end;
3.上面是比较简单的存储过程,下面我们继续将这个存储过程变的更加的复杂,复杂
如何复杂,传递一个变量,我们的目的是查找每天取号的数量,所以说我们要传递一个日期
create PROCEDURE pr_dailycheck(in daily1 VARCHAR(32))
begin
declare daily varchar(32);
SET daily=daily1;
select * from audit_queue_history where DATE_FORMAT(GETNOTIME,'%Y-%m-%d')=DATE_FORMAT(daily,'%Y-%m-%d');
end;
调用存储过程:
CALL pr_dailycheck('2018-07-16');
上面是我们向存储过程中传递一个参数,如何定义带有参数的存储过程,需要注意的是使用的关键字 是 in
4.上面是一个还算是比较简单的存储过程,我们可以在存储过程中作很多的操作,下面我们在存储过程中创建一个表,因为我们报表统计需要输出不同的很多的字段,并且每个字段的每个字段的查找都会使用到不同的数据表,我们可以如果使用left join那样可能太过麻烦,我们可以创建一个数据表,将查找的结果存放在这个临时的表里面,最后遍历这个临时的表,不就是我们想要的结果了
所以下面我们开始在存储过程里面创建数据表:
create PROCEDURE pr_dailycheck(in daily1 VARCHAR(32))
begin
declare daily varchar(32);
SET daily=daily1;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable (rowguid VARCHAR(50) PRIMARY KEY,-- 主键ouname VARCHAR(50),-- 部门名称queuenum INT,-- 取号数consultnum INT(50), -- 咨询答复数量linkbnnum INT-- 关联办件的数量);TRUNCATE TABLE tmpTable; select * from tmpTable;
end;
这个时候我们如果继续调用这样的调用这个存储过程,搜索的结果如下:
其实这个就是我们在存储过程里面创建的一个临时的表,但是这个表里面还没有数据,我们一个比较完整的存储过程里面应该应该存放数据,那么如何来存放数据,下面我们关心的问题便是向这个临时的表里面插入数据
5.临时表插入数据
当然我们向临时表里面插入数据也不是随便把数据插入的,我们需要在库里面查找到数据,然后插入到这个表里面
比如上面的ouname
其实在这个之前,我们有必要了解一下有游标,因为在插入数据到数据表中,我们常常会使用有游标,而且游标在存储过程中应用也是十分的广泛的,现在我们就来看一下如何来使用创建一个游标
drop procedure if exists pr_dailycheck;
create PROCEDURE pr_dailycheck(in daily1 VARCHAR(32))
begin
declare daily varchar(32);
DECLARE done INT DEFAULT FALSE;
declare ou_guid varchar(32);
declare ou_name varchar(32);
DECLARE myCursor CURSOR FOR(select ouname from frame_ou);-- 创建游标并且赋值为结果集合
DECLARE CONTINUE HANDLER for not found SET done = 1;
SET daily=daily1;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable (rowguid VARCHAR(50) PRIMARY KEY,-- 主键ouname VARCHAR(50),queuenum INT,consultnum INT(50), linkbnnum INT);TRUNCATE TABLE tmpTable; OPEN myCursor; -- 打开游标 myLoop: LOOP -- 开始循环体,myLoop为自定义循环名FETCH myCursor into ou_name; -- 将游标当前读取行的数据,顺序赋予自定义变量 IF done=1 THEN -- 判断是否继续循环 LEAVE myLoop; -- 结束循环 END IF;INSERT INTO tmpTable(rowguid,ouname) values(UUID(),ou_name);END LOOP myLoop; -- 结束自定义循环体 CLOSE myCursor; -- 关闭游标 select * from tmpTable;
end;
上面其实是创建游标,并且给游标赋值一个结果的集合,当这些任务完成之后,这样当然是不行的我们的报表统计需要的那是相当的复杂,,我们在循环里面需要利用遍历的变量在不同的表字段里面进行查找数据,然后赋值给一个变量最后将这个这些变量作为值插入到临时表里面,我们在循环的时候,可以同时在游标里面设计两个变量:
drop procedure if exists pr_dailycheck;
create PROCEDURE pr_dailycheck(in daily1 VARCHAR(32))
begin
declare daily varchar(32);
DECLARE done INT DEFAULT FALSE;
declare ou_guid varchar(50);
declare ou_name varchar(32);
DECLARE myCursor CURSOR FOR(select ouname,ouguid from frame_ou where oucode like '%320700%');-- 创建游标并且赋值为结果集合
DECLARE CONTINUE HANDLER for not found SET done = 1;
SET daily=daily1;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable (rowguid VARCHAR(50) PRIMARY KEY,-- 主键ouname VARCHAR(50),-- 部门名称queuenum INT,-- 取号数consultnum INT(50), -- 咨询答复数量linkbnnum INT-- 关联办件的数量);TRUNCATE TABLE tmpTable; OPEN myCursor; -- 打开游标 myLoop: LOOP -- 开始循环体,myLoop为自定义循环名FETCH myCursor into ou_name,ou_guid; -- 将游标当前读取行的数据,顺序赋予自定义变量 IF done=1 THEN -- 判断是否继续循环 LEAVE myLoop; -- 结束循环 END IF;INSERT INTO tmpTable(rowguid,ouname) values(ou_guid,ou_name);END LOOP myLoop; -- 结束自定义循环体 CLOSE myCursor; -- 关闭游标 select * from tmpTable;
end;
上面就是在游标里面涉及到了两个变量,并且ou_name和ou_guid是一一对应的
我们可以创建变量向临时的表里面输入数据:
drop procedure if exists pr_dailycheck;
create PROCEDURE pr_dailycheck(in daily1 VARCHAR(32))
begin
declare daily varchar(32);
DECLARE done INT DEFAULT FALSE;
declare ou_guid varchar(50);
declare ou_name varchar(32);
DECLARE myCursor CURSOR FOR(select ouname,ouguid from frame_ou where oucode like '%320700%');-- 创建游标并且赋值为结果集合
DECLARE CONTINUE HANDLER for not found SET done = 1;
SET daily=daily1;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable (rowguid VARCHAR(50) PRIMARY KEY,-- 主键ouname VARCHAR(50),-- 部门名称queuenum INT,-- 取号数consultnum INT(50), -- 咨询答复数量linkbnnum INT-- 关联办件的数量);TRUNCATE TABLE tmpTable; OPEN myCursor; -- 打开游标 myLoop: LOOP -- 开始循环体,myLoop为自定义循环名FETCH myCursor into ou_name,ou_guid; -- 将游标当前读取行的数据,顺序赋予自定义变量 IF done=1 THEN -- 判断是否继续循环 LEAVE myLoop; -- 结束循环 END IF;SET @rowguid=UUID();-- 也可以这样set @cnt = (select count(*) from test_tbl);INSERT INTO tmpTable(rowguid,ouname) values(@rowguid,ou_name);END LOOP myLoop; -- 结束自定义循环体 CLOSE myCursor; -- 关闭游标 select * from tmpTable;
end;
好了,到这个地方我们的存储过程在mysql里面基本上所有的功能都可以实现了,也许上面的描述语句不够详细,希望对你有所帮助
报表统计-mysql存储过程相关推荐
- 帆软报表调用mysql存储过程_FineReport单行与数据库交互的方法
FineReport单行与数据库交互的方法 1. 问题描述 我们在做一张报表填报的时候经常会遇到需要在一行进行添加动作,将该行数据直接与数据库交互,执行存储过程过程.我们可以通过每一行增加帆软&q ...
- 帆软报表调用mysql存储过程_FineReport调用存储过程
"总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现. 首先分析这个问题的条件和要求: 条件:只有一个 ...
- mysql数据库计算全部女生_使用mysql存储过程-统计某个数据库下的所有表的记录数...
使用 mysql 存储过程 - 统计某个数据库下的所有表的记录数 其中用到了游标 (cursor) ,循环 (loop) ,动态 SQL 预处理 (prepare) 等技术,特 此记录一下. [sql ...
- 关于银行报表开发简单思路解析(MYSQL存储过程)
关于银行报表开发简单思路解析(MYSQL存储过程) 需求分析: 该表为简易银行报表模板,一般为行列模式. 基础表设计: 1.根据业务种类建立对应业务的维度表,一般为客户维度表,产品维度表,资产维度表等 ...
- es统计mysql 报表_Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0...
前言: 这是1张相对简单些报表示例,用sql语句也能实现,但主要是为了便于大家理解ES聚合实现报表的使用方法. 之前写过"java实现日报表.月报表统计,没数据补0"文章,http ...
- Mysql报表统计常用sql
按半小时报表统计. SELECT COUNT(1) AS value, DATE_FORMAT(dataStartTime,'%H:%i') AS category FROM ( SELECT DAT ...
- flexcell绑定MySQL数据_利用FlexCell实现的一些报表统计应用
FlexCell表格控件有很多亮点的功能,使用也算比较方便,很多时候,可以模拟传统的Excel内容在Winform界面上展现,而且也支持内容格式的预设置等,本文主要介绍利用这个控件来实现一些特殊的统计 ...
- hibernate mysql 存储过程_hibernate调用mysql存储过程
hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...
- mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...
Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...
最新文章
- nginx进程管理之worker进程
- 你需要知道的10个最佳javascript开发实践
- structs2文件下载
- Vue的模板字符串${}用法
- vs2013创建及使用DLL
- (王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作
- linux环境下软件包的安装
- lambda表达式学习例子
- 获取目标服务器c盘下flag文件信息,公开课基础演练靶场 第六章 webshell控制目标详细解题思路...
- JAVA中this的四种用法的详解
- 贪吃蛇游戏//html+js//
- 使用Java语言打印爱心
- vscode安装插件以及配置anaconda
- 科普:手机的各种传感器原理及用途
- C# Task不执行的一种情况
- dell服务器r730老自动重启_Re: DELL R730 服务器异常卡死导致iDRAC控制台无信号以及服务器远程连接失败重启后报内存错误(已插拔并已改变卡槽位置)...
- 51单片机学习——PWM
- python实现找任意点关于直线的对称点
- 爬虫学习,尝试爬取小说网站
- 渗透测试业务逻辑测试汇总—专项篇
热门文章
- 改进粒子群优化算法(IWAPSO)的MATLAB源程序
- ORACLE分页SQL语句
- MySQL高级篇:控制流函数
- 记一次线上商城系统 Tomcat、JVM 高并发的优化
- 前腾讯员工不堪房价压力回老家进国企!终于过上了清闲的日子,他又担心这个问题?...
- 解密 Redis 助力双 11 背后电商秒杀系统
- 四面阿里看看你都会吗
- 特朗普推文的文本分析
- 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思?...
- 马云再谈996,又一次被网友怒骂:马老师,求求你闭嘴吧!