前几天在公司做一业务模块测试的时候,将测试都删除了,导致客户端想拿测试数据拿不到了,一下没时间一条一条的录数据,所以只有采取存储过程实现模拟数据插入。
数据需求:
有两个字段类型是Decimal,保留两位小数。还有两种时间: 第一个格式是"yyyyMMDD" 第二种是时间戳格式但是比第一种时间大一天。同时还有一个字段是存放前一天(类型是Decimal 其中一个)数据和今天数据差值。了解了大概业务需求,接着开始写mysql 存储过程。
代码如下:
delimiter // /**加 // 代表默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。 因为mysql一遇到分号,它就要自动执行。 即,在语句RETURN '';时,mysql解释器就要执行了。 这种情况下,就需要事先把delimiter换成其它符号,如//或$$**/ create PROCEDURE test()/* 名字可以替换 最好和这个方法做的时吻合 我这个就是一个测试**/ begin /* 方法开始固定语法*/ DECLARE i int;/**定义一个变量 控制循环 类似java 中for循环变量 **/ DECLARE j DOUBLE; DECLARE cv DOUBLE; DECLARE temp DOUBLE; DECLARE cvRatio DOUBLE; DECLARE mydate varchar(30); DECLARE sdate varchar(30); DECLARE tempstr varchar(30); set i =0; set j =2.13; set cv = 0; set temp = 0; set sdate = '20171201'; set mydate =unix_timestamp(date_add(sdate, interval 1 day)); set cvRatio = 0; while i<140 DO insert into qz_share_bonus(share_day,share_money,share_quzubi,add_time,share_time,is_share,change_quzubi,change_ratio) values(sdate,j,j,mydate,mydate,1,cv,cvRatio); set i = i+1; set temp = j; set j = format(RAND()*6,2)+0.01; set sdate = date_format(date_add(sdate, interval 1 day),'%Y%m%d'); set mydate = unix_timestamp(date_add(sdate, interval 1 day)); set cv = j- temp; set cvRatio = cv/temp*100; end while; end;// call test() /**执行test 存储过程**/执行结果: