在mysql的test库中执行如下sql:
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`sex` tinyint(1) NOT NULL COMMENT '1--男,2-女',
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '1', '王士大');
INSERT INTO `user` VALUES ('2', '2', '李莉');
INSERT INTO `user` VALUES ('3', '1', '赵东方');
-- ----------------------------
-- Procedure structure for getResultFromUser
-- ----------------------------
DROP PROCEDURE IF EXISTS `getResultFromUser`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `getResultFromUser`(out result varchar(128))
begin
-- 游标所使用变量需要在定义游标之前申明
declare id int(11);
declare name varchar(20);
declare sex TINYINT(1);
declare temp varchar(100) default "";
-- 遍历数据结束标志 注意位置顺序
DECLARE done INT DEFAULT FALSE;
-- 注意用别名 因为id在上面已经有定义所以需要使用表的别名区别
declare cur_test CURSOR for select t.id,t.name,t.sex from user t;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open cur_test;
while done <> 1 do # 循环读取游标数据
fetch cur_test into id, name,sex;
if done <> 1 then
select CONCAT(temp,id,'==') into temp;
end if;
end while;
close cur_test;
select temp into result;
select result;
end
;;
DELIMITER ;
使用如下语句进行测试:
call getResultFromUser(@result);
执行结果如下: