mysql 存储过程示例

在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);

执行结果如下:

猜你喜欢

转载自blog.csdn.net/eaglejiawo1120/article/details/83818767