mysql 存储过程 计算报表
把用例执行情况mysql表汇总起来
proc_write_report 汇总执行用例表中的测试数据 写入report 表,report表包括字段 report_id(自增)execution_flag,class_name,method_name, module,case_name,execution_amount, pass_amount,fail_amount,fail_reason,`time`,`comment`
DELIMITER $$
USE `test_cases`$$
DROP PROCEDURE IF EXISTS `proc_write_report`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_write_report`(IN p_table_name VARCHAR(80),IN p_class_name VARCHAR(80),IN p_method_name VARCHAR(80),IN p_execution_flag VARCHAR(80))
BEGIN
DECLARE var_class_name VARCHAR(180) DEFAULT NULL; -- 测试类名
DECLARE var_method_name VARCHAR(180) DEFAULT NULL; -- 测试方法名
DECLARE var_module VARCHAR(180) DEFAULT NULL; -- 测试模块 中文
DECLARE var_case_name VARCHAR(180) DEFAULT NULL; -- 测试用例名称 中文
DECLARE var_pass_amount INT DEFAULT 0; -- 通过用例数量
DECLARE var_fail_amount INT DEFAULT 0; -- 失败用例数量
DECLARE var_fail_reason VARCHAR(2000) DEFAULT NULL; -- 失败原因
DECLARE var_comment VARCHAR(2000) DEFAULT NULL; -- 备注
DECLARE var_sql_string VARCHAR(2000) DEFAULT NULL; -- sql 语句 SET @var_cass_name = p_class_name;
SET @var_method_name = p_method_name; -- 获取成功用例数
SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 1 ");
-- SELECT @var_sql_string;
CALL p_get_select_row_number(@var_sql_string,@var_pass_amount);
-- SELECT @var_pass_amount;
-- 获取失败用例数
SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 ");
-- SELECT @var_sql_string;
CALL p_get_select_row_number(@var_sql_string,@var_fail_amount);
-- SELECT @var_fail_reason; -- 获取用例模块中文名称
SET @var_sql_string = CONCAT("SELECT DISTINCT test_module_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"' AND test_method = '",p_method_name,"'");
-- select @var_sql_string;
CALL proc_get_table_column_content(@var_sql_string,@var_module);
-- SELECT @var_module; -- 获取用例方法中文名称
SET @var_sql_string = CONCAT("SELECT DISTINCT test_case_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"' AND test_method = '",p_method_name,"'");
-- select @var_sql_string;
CALL proc_get_table_column_content(@var_sql_string,@var_case_name);
-- SELECT @var_module; -- select * from `execution_send_express_sf`; SET @var_sql_string = CONCAT("select distinct actual_result from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 and is_execution = 1");
-- SELECT @var_sql_string;
CALL proc_get_table_column_content(@var_sql_string,@var_fail_reason);
-- SELECT @var_fail_reason ; IF (SELECT COUNT(*) FROM report WHERE execution_flag = p_execution_flag
AND class_name = p_class_name AND method_name = p_method_name ) THEN UPDATE report SET class_name = p_class_name, method_name = p_method_name,
module = @var_module, case_name = @var_case_name,
execution_amount = (@var_pass_amount + @var_fail_amount), pass_amount = @var_pass_amount , fail_amount = @var_fail_amount,
fail_reason = @var_fail_reason, `COMMENT` = @var_comment, `TIME` = NOW()
WHERE execution_flag = p_execution_flag AND class_name = p_class_name AND method_name = p_method_name ; ELSE
INSERT INTO report(execution_flag,class_name,method_name,
module,case_name,execution_amount,
pass_amount,fail_amount,fail_reason,`time`,`comment`)
VALUES (p_execution_flag,p_class_name,p_method_name,
@var_module,@var_case_name,(@var_fail_amount + @var_pass_amount),
@var_pass_amount,@var_fail_amount,@var_fail_reason,NOW(),@var_comment ); END IF; END$$ DELIMITER ;
获取查询语句影响的行数,输入查询,输出行数
DELIMITER $$ USE `test_cases`$$ DROP PROCEDURE IF EXISTS `proc_get_select_row_number`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p_get_select_row_number`(IN p_select_sql VARCHAR(500), OUT p_count INT(8) )
BEGIN
-- 声明
DECLARE cnt INT DEFAULT 0;
DECLARE stmt VARCHAR(200); -- 赋值
SET @stmt = CONCAT(p_select_sql);
-- prepare
PREPARE s1 FROM @stmt;
-- 执行
EXECUTE s1;
-- 获取查询影响的行数
SET @cnt = FOUND_ROWS();
-- 输出影响函数
SELECT @cnt INTO p_count ;
END$$ DELIMITER ;
proc_get_table_column_content存储过程,
把某个字段里面查找出来的多个值,循环取出,赋值追加拼接到另外一个变量里面去,输入的查询语句最多只有一个字段
DELIMITER $$ USE `test_cases`$$ DROP PROCEDURE IF EXISTS `proc_get_table_column_content`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_get_table_column_content`(IN select_sql_string VARCHAR(1000), OUT return_string VARCHAR(5000))
BEGIN
DECLARE no_more_contents INT DEFAULT 0;
DECLARE var_id INT;
-- 保存单个内容
DECLARE var_content VARCHAR(200) DEFAULT NULL;
-- 保存所有类容
DECLARE var_all_content VARCHAR(5000) DEFAULT NULL;
-- 保存查询语句
DECLARE var_sql VARCHAR(1000) DEFAULT NULL; -- 定义游标
DECLARE dept_csr CURSOR FOR SELECT * FROM tmp_table;
-- 错误处理
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_contents=1; -- 使用临时表
-- 删除临时表
DROP TEMPORARY TABLE IF EXISTS tmp_table; -- 组装创建临时表语句
SET var_sql = CONCAT('CREATE TEMPORARY TABLE tmp_table ',select_sql_string);
SET @var_sql=var_sql;
-- select var_sql;
-- 预处理要执行的动态SQL
PREPARE stmt FROM @var_sql;
-- 执行SQL语句
EXECUTE stmt;
-- 释放掉预处理段
DEALLOCATE PREPARE stmt;
SET no_more_contents=0;
-- 打开游标
OPEN dept_csr; contentloop: LOOP FETCH dept_csr INTO var_content;
-- 如果没有值,退出循环
IF no_more_contents = 1 THEN
LEAVE contentloop;
END IF;
-- select var_content;
-- 循环取值,并且把不同的值追加赋给同一个变量
-- SELECT var_content;
-- SELECT var_all_content AS A;
IF var_all_content IS NULL THEN
SET var_all_content = var_content;
ELSEIF (var_content IS NOT NULL) && (LENGTH(var_content)!=0) THEN
SET var_all_content = CONCAT(var_all_content,'、',var_content);
END IF;
-- SELECT var_all_content AS B;
-- select var_all_content;
-- 循环结束 退出循环
IF no_more_contents = 1 THEN
LEAVE contentloop;
END IF;
-- SELECT var_all_content AS A;
END LOOP contentloop;
-- 关闭游标
CLOSE dept_csr;
SET no_more_contents=0;
SELECT var_all_content INTO return_string;
DROP TEMPORARY TABLE tmp_table;
END$$ DELIMITER ;
mysql 存储过程 计算报表的更多相关文章
- 写一个MySql存储过程实现房贷等额本息还款计算(另外附javascript代码)
写一个MySql存储过程实现房贷等额本息还款计算 MySql存储过程代码如下: DROP procedure IF EXISTS `calc_equal_interest_proc`; DELIMIT ...
- 什么时候PHP经验MySQL存储过程
1.MySQL存储过程 数据库语言,我们经常使用的操作SQL语句必须首先编译在运行时.然后运行,存储过程(Stored Procedure)它被设置为完成一个特定的功能SQL报表设置.编译存储在数据库 ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- Mysql存储过程调用
mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下. 1.1create p ...
- 《MySQL 存储过程编程》-读书笔记
本书结构: 第一部分:存储编程基础 第1章:存储过程程序基础 第2章:MySQL存储编程指南 第3章:语言基础 第4章:语句块 第5章:在存储程序中使用SQL 第一章:MySQL存储程序介绍 存储程序 ...
- Mysql 存储过程基本语法
delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...
- MySQL 存储过程传参之in, out, inout 参数用法
存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名 参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...
随机推荐
- 【ArcGIS 10.2新特性】地理数据(Geodatabase 和database)10.2 新特性
1. 大数据支持 ArcGIS与Hadoop集成,将提供一个开源的工具包用于大数据的空间分析,开发者将通过该工具包构建定制化的工作流并在ArcGIS当中执行. 支持更多的大数据平台数据 ...
- zend_db连接mysql(附完整代码)(转)
在看这些之前请确保你正确加载了PDO扩展. 作法是编辑php.ini手动增加下面这两行(前面要没有分号;):extension=php_pdo.dllextension=php_pdo_mysql.d ...
- tomcat端口号、日志、启停
cd到tomcat目录下 1.[root@rusky bin]# ./shutdown.sh 关闭tomcat 2.[root@rusky bin]# ./startup.sh ...
- jquery之onchange事件
$(function(){ $("#opreateHtml").window("close"); $("#deliveryGrid").da ...
- SQL2008安装重启失败
我今天安装SQL2008的一些问题经历SQL2008安装重启失败大致出错信息如下:RebootRequiredCheck 检查是否需要挂起计算机重新启动.挂起重新启动会导致安装程序失败. 失败 需要重 ...
- F# 可以把几个函数组合成新函数
C#能做的,F#基本都能做,但F#能做的,C#未必能做. F#中的函数可以把几个函数组合起来使用.下面的例子是把由 function1 和 function2 这两个函数通过运算符“>>” ...
- 《第一行代码》学习笔记36-服务Service(3)
1.为了更加方便在子线程中对UI操作,借助Android中提供的AsyncTask,十分简单地从子线程到主线程的. 2.一个最简单的自定义AsyncTask写成如下方式: class Download ...
- C#中静态构造函数含义及使用
static以前都接触过,可是最近才发现了还有静态类的写法,也可能是以前没太注意了,所以自己去研究了一下! 1.什么是构造函数: 1.1 例如:static Class{} 1.2 使用静态函数的注 ...
- 在eclipse中对于java的操作
1. 新建project new project --> java project -->input the name of the project and choose the jre ...
- 《HTML5经典坦克大战》游戏(代码)
前几天粗略地学了HTML5,然后就用它写了一个<经典坦克大战>游戏. 现在想分享一下我写的代码,写得不好请大家多多指教. 给大家推荐一个网站,这个网站是为大学生而做,为方便学习编程的同学而 ...