存储过程的基本结构
- 删除原有存储过程
- 设置DELIMITER
- 创建存储过程
- 设置DELIMITER
--删除原有存储过程
DROP PROCEDURE IF EXISTS `testCursor`;
--设置新的DELIMITER,以便在存储过程中使用“;”
DELIMITER $$
--创建存储过程
CREATE PROCEDURE testCursor()
BEGIN
....
END $$
--设置DELIMITER,改回“;”
DELIMITER ;
存储过程主体中的顺序
- 定义局部变量
- 为局部变量赋值
- 定义游标
- 定义处理程序
- 打开游标
- 定义LOOP
- 将游标值赋值到局部变量
- 业务处理逻辑
- 判断游标是否结束,如果游标结束则离开LOOP
- 结束LOOP
- 关闭游标
BEGIN
--定义局部变量
DECLARE _USERID BIGINT(20) DEFAULT NULL;
DECLARE _USERCOUNT INT(11) DEFAULT NULL;
DECLARE _DONE INT(11) DEFAULT FALSE;
DECLARE _IDSTR VARCHAR(255) DEFAULT NULL;
DECLARE _CUR_USERS CURSOR FOR SELECT id FROM t_sys_users ORDER BY id DESC LIMIT 0,2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _DONE = TRUE;
OPEN _CUR_USERS;
LOOP_USERS: LOOP
FETCH _CUR_USERS INTO _USERID;
SET _IDSTR = CONCAT(IFNULL(_IDSTR,""),"|",_USERID);
SELECT COUNT(1) INTO _USERCOUNT FROM t_sys_users;
IF(_DONE) THEN
LEAVE LOOP_USERS;
END IF;
END LOOP;
CLOSE _CUR_USERS;
SELECT _IDSTR;
END$$