mysql 儲存過程示例
阿新 • • 發佈:2018-11-07
在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);
執行結果如下: