1. 程式人生 > >mysql 儲存過程示例

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

執行結果如下: