1.我为啥会学mysql存储过程?
因为在之前工作不懂存储过程,没有及时发现bug,后面就花一个月的时间学习mysql存储过程,把公司所有的存储过程及其所有表都弄懂了。然而尴尬的是,在一次面试时面试官要我手写一个存储过程,我既然写不出来。
2.很多东西学会了不经常用就容易忘记,建议大家学会的东西时不时拿出来练练手。
下面就是我写来玩的存储过程
1)创建两张表
CREATE TABLE `mtfan` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
`name` varchar(60) DEFAULT NULL COMMENT ‘姓名‘,
`money` varchar(60) DEFAULT NULL COMMENT ‘钱‘,
`date_1` date DEFAULT NULL COMMENT ‘时间‘,
PRIMARY KEY (`id`)
);
CREATE TABLE `mtfan01` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
`name` varchar(60) DEFAULT NULL COMMENT ‘姓名‘,
`money` varchar(60) DEFAULT NULL COMMENT ‘钱‘,
`date_1` date DEFAULT NULL COMMENT ‘时间‘,
PRIMARY KEY (`id`)
);
2)创建一个存储过程,向mtfan表里插入数据
CREATE PROCEDURE `inout_param`()
BEGIN
declare i int default 0;
declare money int ;
loop_label: loop
set money = FLOOR( 500 + RAND() * (1000 - 500));
INSERT INTO mtfan (name,money,date_1) VALUES(‘小明‘,money,‘2018-07-30‘);
INSERT INTO mtfan (name,money,date_1) VALUES(‘小红‘,money,‘2018-07-30‘);
INSERT INTO mtfan (name,money,date_1) VALUES(‘小猪‘,money,‘2018-07-30‘);
INSERT INTO mtfan (name,money,date_1) VALUES(‘小李‘,money,‘2018-07-30‘);
INSERT INTO mtfan (name,money,date_1) VALUES(‘小国‘,money,‘2018-07-30‘);
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
END;
3)创建一个游标存储过程,把mtfan表里的数据传给mtfan01表
CREATE PROCEDURE `cursor_example`()
BEGIN
#定义函数
DECLARE cnname VARCHAR(20) DEFAULT ‘‘;
DECLARE cnmoney INT DEFAULT 0;
DECLARE date DATETIME DEFAULT ‘2018-08-01‘;
DECLARE done INT DEFAULT 0;
#创建一个游标
DECLARE cur1 CURSOR FOR SELECT name,money,date_1 FROM mtfan WHERE date_1 = ‘2018-07-10‘;
#设置变量 done=1时跳出循环
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
#打开游标
OPEN cur1;
#创建一个loop循环
emp_loop: LOOP
#把游标查询得到的值传给对应的函数
FETCH cur1 INTO cnname,cnmoney,date;
#满足条件终止循环
IF done=1 THEN
LEAVE emp_loop;
#if结束
END IF;
#sql插入语句
INSERT INTO mtfan01 (name,money,date_1) VALUES(cnname,cnmoney,date);
#循环结束
END LOOP emp_loop;
#关闭游标
CLOSE cur1;
END;
原文地址:https://www.cnblogs.com/mtfan01/p/9441904.html