参考:https://www.cnblogs.com/gaopeng527/p/4447607.html
看了比较多的文章,发现都有部分差异,主要是在于使用工具的版本上,自己也是在学习中,正好发出来,总结一下,如果有不正确的地方,请指出,谢谢。
然后选择“过程”。
这里的参数设置可以先不管,能在后续根据需要添加。
但还是说明一下,模式分为三种:
1、IN:输入参数
2、OUT:输出参数
3、INOUT:既作为输入参数,也作为输出参数
需要注意,如果我们的存储过程需要外部传入参数进行运算,以及需要返回部分参数,是需要定义好的。
上面的就是什么参数都没有设置的初始情况。
那么如果这时候我们保存一下。
接着,我们需要做一些准备措施,先建一个表t_test,有两个字段cell_0、cell_1。
CREATE TABLE `t_test` (
`cell_0` varchar(255) DEFAULT NULL,
`cell_1` varchar(255) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
数据请自己插入,没有硬性要求。
还有另外一个表,仅仅名字不一样了而已。
CREATE TABLE `tt_test` (
`cell_0` varchar(255) DEFAULT NULL,
`cell_1` varchar(255) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
这时候,需要我们t_test这个表内必须有数据,而tt_test则是空的,请检查一下。
先给出具体的过程代码,里面包含了部分解释。
CREATE DEFINER=`root`@`localhost` PROCEDURE `test1`(IN name varchar(20))
BEGIN
/* 定义变量 */
declare tmp0 VARCHAR(1000);
declare tmp1 VARCHAR(1000);
declare done int default -1;
/* 声明游标 */
declare myCursor cursor
/*查出需要的集合放到游标中*/
for select cell_0,cell_1 from t_test;
/* 当游标到达尾部时,mysql自动设置done=1 */
declare continue handler for not found set done=1;
/* 打开游标 */
open myCursor;
/* 循环开始 */
myLoop: LOOP
/* 移动游标并赋值 */
fetch myCursor into tmp0,tmp1;
-- 游标到达尾部,退出循环
if done = 1 then
leave myLoop;
end if;
-- 可以加入insert,update等语句
INSERT INTO tt_test VALUES(tmp0,tmp1);
/* 循环结束 */
end loop myLoop;
/* 关闭游标 */
close myCursor;
END
这里都比较好理解,尤其说一下这行
fetch:指的是从游标中取出数据,每取出一行,会转向下一行
保存、运行,返回这句 Procedure executed successfully 代表成功。
这时候我们去看看tt_test这个表是否有数据。
如没有打错字等等的问题,是可以的。