Navicat for MySQL 函数 存储过程 遍历创建大量复杂结构测试数据
需求说明:
测试接口时需要造数据,由于数据层次比较复杂导致数量较大,手动添加比较困难,所以就建了一个存储过程函数,来遍历插入数据。
工具 Navicat for MySQL
1、这里使用的Navicat 所以先安装Navicat 并连接到你想有创建函数的数据库
2、新建函数
***注意****
由于软件版本不同 步骤稍有差别,以下第3、4部是我用window时 老版本的navicat需要选择这两部,现在用mac版的 版本貌似比较新,直接就进入第5步了。如果你直接进入第5部 直接进行编辑即可,就像写java、scala等一样写一个function就好了,只是语法有所不同而已。
3、选择过程
4、设置添加参数,如选择IN指的是调用此函数时传入的参数名以及类型,out为返回值........
5、在以下对应位置修改和填写自己需要的内容,我们只需要写方法名,参数列表,函数体 就ok了
填写完函数内容保存即可
示例:以下是我创建之后的语句
注:其中 第一句中的DEFINER=`root`@`%` 是创建语句时DEFINER = CURRENT_USER 自动获取替换登录用户后生成的,不需要自己修改。
CREATE DEFINER=`root`@`%` PROCEDURE `MakeData_dm_f_activity_analysis_hour`()
BEGIN
DECLARE dataType int;#声明变量(有些变量需要添加长度限制才能正常保存函数)
DECLARE grading int;
DECLARE gradTime VARCHAR(11);#声明变量(有些变量需要添加长度限制才能正常保存函数)
DECLARE sumCount int;
DECLARE inputDate VARCHAR(11);
set inputDate='2018-05-01';#需要造那天的数据修改此处即可
set dataType=1;
set grading=0;
WHILE grading<24 do #插入数据的多少
set sumCount=RAND()*1000; #随机函数 RAND()生成的是0~1之间的小数,乘以多少就可以放大多少倍,如起点不是0,则加上起点数 如20~80:RAND()*60+20
if (grading<10) then
set gradTime = CONCAT('0',grading,':00');
else
set gradTime =CONCAT(grading,':00');
end if;
#5个数据类型 和24个小时遍历生成数据,组合七个固定生命周期插入
INSERT INTO `bg_webAnalysis`.`dm_f_activity_analysis_hour`(`id`, `tenant_id`, `activity_id`, `type`, `data_type`, `sum_target`, `data_hour`, `created_at`, `updated_at`, `created_by`, `updated_by`, `publish_status`, `input_date`) VALUES (null, 1, 1, 1, dataType, sumCount, gradTime, '2018-05-21 14:51:34', '2018-05-21 14:51:40', 123123, 3213123, 1, inputDate);
if (dataType<5) then
set dataType= dataType+1;
elseif (dataType=5) then
set grading=grading+1;
set dataType= 1;
end if;
END WHILE;
END;
此处是造数,所以无需参数和返回值。
注意事项/语法:
1、DECLARE 用来声明变量。但是有些变量需要添加长度限制才能正常保存函数。
2、set 用给变量赋值
3、WHILE do END WHILE; 来循环
4、条件用if语句
if (dataType<5) then
set dataType= dataType+1;
elseif (dataType=5) then
set grading=grading+1;
set dataType= 1;
end if;
但是此处注意elseif 要连起来写。
5、CONCAT(str1,str2,str3,......'); 函数用来拼接字符串
6、RAND()生成0~1的数据数(与java等类似)可以*1000 再赋给int即可产生,0~1000的随机整数
上一篇: 算法设计与分析实践-作业4
下一篇: mysql中的日期类型小结笔记