mysql 存儲過程模板-用游標獲取數據並修改


    對於一般的程序員,使用的存儲過程並不多,要快速入手,有一個模板是非常重要的。

要點:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM