mysql存储过程使用心得

创建存储过程语法:

generate_requirement是我的存储过程的名字,大家需要自定义的
我的存储过程需要两个输入参数needNewTemplateCode 、requireName ,大家视具体情况处理,
除了IN参数还可以有OUT输出参数。

DELIMITER $$
DROP PROCEDURE IF EXISTS generate_requirement$$
CREATE PROCEDURE generate_requirement(IN needNewTemplateCode int,IN requireName VARCHAR(30))
BEGIN
-- 你的业务处理代码(包含定义变量,游标等等操作)
END$$
DELIMITER ;

整个存储过程无论多长的处理过程,一定注意所有变量,和sql语句涉及的列名不可出现重复值,实力被名字坑了一回……

DELIMITER :其中DELIMITER 定好结束符为"$$", 然后最后又定义为";", MYSQL的默认结束符为";"
主要应用于命令行中,因为mysql命令号以分号结束一个操作,如下所示:

mysql> select * from test_table; 

如果不想只是执行一句话,而是执行多个以分号结尾的语句,则使用DELIMITER,事先把分号替换成其他符号,最后DELIMITER; 向mysql提交执行

declare声明的变量游标全部定义在起始位置,declare之间不能有其他操作数据库的SQL

定义游标语法:

DECLARE CURSOR_NAME CURSOR FOR  SELECT 列一,列二,列三 FROM TABLE;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = TRUE;
-- 打开游标 CURSOR_NAME
OPEN CURSOR_NAME;
LOOP_NAME:LOOP
    
    FETCH CURSOR_NAME  INTO 变量一,变量二,变量三;
    IF DONE = 1 THEN
        LEAVE LOOP_NAME;
    END IF;

    --  亲们的处理脚本
END LOOP LOOP_NAME;
CLOSE CURSOR_NAME;

如果是多个cursor ,中间需要重置 done标识的值 set done = 0;
当然了,游标也可以嵌套使用;
遍历也不止loop这一种方式,还可以用WHILE DO循环、REPEAT循环;

还有一个小坑:如果在游标之间的处理脚本,查出了NULL值会退出循环结束脚本,所以尽量避免查出NULL值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值