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