對於一般的程序員,使用的存儲過程並不多,要快速入手,有一個模板是非常重要的。
要點:
1. 存儲過程創建的模板
2.參數的定義
3.游標的使用
4. LOOP循環的使用
5.表名使用變量的解決方案,借助中間表或者視圖
6.sql語句中包含變量,需要先拼接,后執行器執行
注意:
1.定義參數代碼時不能夾雜賦值代碼
2.游標定義賦值中不能使用變量
3.sql語句中不能直接使用變量
模板代碼:
1 DELIMITER $$ 2 3 USE `dbName`$$ 4 5 DROP PROCEDURE IF EXISTS `updateTermNo`$$ 6 7 CREATE DEFINER=`root`@`%` PROCEDURE `updateTermNo`(IN table_name VARCHAR(32),IN cloumn_name VARCHAR(32)) 8 BEGIN 9 DECLARE tid INT; 10 DECLARE termNo VARCHAR(32); 11 DECLARE done INT DEFAULT FALSE; 12 13 DECLARE termInfo CURSOR FOR ( -- 定義 14 SELECT id FROM table_view 15 ); 16 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 監聽器 17 18 DROP VIEW IF EXISTS table_view; -- 判斷刪除視圖 19 20 -- 創建視圖 21 SET @SELECT = CONCAT('CREATE VIEW table_view as SELECT id, ',cloumn_name,' as tnum FROM ', table_name , ';'); 22 PREPARE stm FROM @SELECT; 23 EXECUTE stm; 24 DEALLOCATE PREPARE stm; 25 26 OPEN termInfo; -- 打開游標 27 label:LOOP 28 29 FETCH termInfo INTO tid; 30 31 IF done THEN LEAVE label;END IF; 32 33 SELECT tnum INTO termNo FROM table_view WHERE id = tid; -- 從視圖中獲取的終端編號 34 35 START TRANSACTION; -- 開啟事務 36 37 -- 執行更新 38 SET @UPDATE = CONCAT('UPDATE ',table_name ,' SET ', cloumn_name , '= LPAD(',termNo,',9,0) WHERE id = ',tid); 39 -- select concat('更新語句:', @UPDATE); 40 PREPARE stm FROM @UPDATE; 41 EXECUTE stm; 42 DEALLOCATE PREPARE stm; 43 44 COMMIT;-- 提交 45 46 END LOOP label; 47 CLOSE termInfo; -- 關閉游標 48 END$$ 49 50 DELIMITER ; 51 52 -- 終端列表 53 CALL updateTermNo('tableName','columnsName');
