delimiter ;; drop procedure if exists `proc_test` ;; CREATE PROCEDURE `proc_test`() BEGIN -- 定義變量,變量參數個數和類型和查出來的要一致 DECLARE done INT DEFAULT FALSE; DECLARE field_1 VARCHAR(20); DECLARE field_2 VARCHAR(20); -- 創建遊標,並存儲數據 DECLARE cur_list CURSOR FOR SELECT id, name FROM user; -- 遊標中的內容執行完後將done設置爲true,遊標找不到下一個就會觸發該語句 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; -- 打開遊標 OPEN cur_list; -- 執行循環 read_loop : LOOP -- 取遊標中的值 FETCH cur_list INTO field_1, field_2; -- 判斷是否結束循環,一定要放到FETCH之後,因爲在fetch不到的時候纔會設置done爲true -- 如果放到fetch之前,先判斷done,這個時候done的值還是之前的循環的值,因此就會導致循環一次 IF done THEN LEAVE read_loop; END IF; -- 執行SQL操作 SET @sql_insert = CONCAT("insert into user_bak(id, name) VALUES ('", field_1, "','", field_2 ,"')"); PREPARE sql_param FROM @sql_insert; EXECUTE sql_param ; COMMIT; END LOOP read_loop; -- 釋放遊標 CLOSE cur_list; END ;; delimiter;
mysql 存儲過程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.