mysql存储过程执行动态sql
来源:互联网 发布:java获取数据库表字段 编辑:程序博客网 时间:2024/05/20 05:26
delimiter //
drop PROCEDURE IF EXISTS attentBatch;
create PROCEDURE attentBatch(userid INT,num INT)
BEGIN
DECLARE self_tab_index INT;
DECLARE done INT DEFAULT 0;
DECLARE tabindex INT;
DECLARE fansuserid INT;
DECLARE sql1 VARCHAR(500);
DECLARE sql2 VARCHAR(500);
DECLARE cur_user CURSOR FOR SELECT user_id FROM em_user limit num;-- 定义光标
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;-- 处理异常
SET self_tab_index = userid % 4;
OPEN cur_user;
REPEAT
FETCH cur_user into fansuserid;
SET tabindex = fansuserid % 4;-- 分表算法
SET sql1 = CONCAT("INSERT IGNORE INTO em_user_relation",tabindex,"(user_id,follow_id,type)","VALUES(",fansuserid,',',userid,',',1,")");
SET @sql1 = sql1;-- 注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头
PREPARE stmt FROM @sql1; -- 预处理需要执行的动态SQL,其中stmt是一个变量
EXECUTE stmt; -- 执行sql语句
DEALLOCATE PREPARE stmt;-- 释放预处理段
SET sql2 = CONCAT("INSERT IGNORE INTO em_user_relation",self_tab_index,"(user_id,follow_id,type)","VALUES(",userid,',',fansuserid,',',0,")");
SET @sql2 = sql2;
PREPARE stmt1 FROM @sql2;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
UNTIL done END REPEAT;
SELECT sql2; -- 测试sql
CLOSE cur_user;
END
//
drop PROCEDURE IF EXISTS attentBatch;
create PROCEDURE attentBatch(userid INT,num INT)
BEGIN
DECLARE self_tab_index INT;
DECLARE done INT DEFAULT 0;
DECLARE tabindex INT;
DECLARE fansuserid INT;
DECLARE sql1 VARCHAR(500);
DECLARE sql2 VARCHAR(500);
DECLARE cur_user CURSOR FOR SELECT user_id FROM em_user limit num;-- 定义光标
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;-- 处理异常
SET self_tab_index = userid % 4;
OPEN cur_user;
REPEAT
FETCH cur_user into fansuserid;
SET tabindex = fansuserid % 4;-- 分表算法
SET sql1 = CONCAT("INSERT IGNORE INTO em_user_relation",tabindex,"(user_id,follow_id,type)","VALUES(",fansuserid,',',userid,',',1,")");
SET @sql1 = sql1;-- 注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头
PREPARE stmt FROM @sql1; -- 预处理需要执行的动态SQL,其中stmt是一个变量
EXECUTE stmt; -- 执行sql语句
DEALLOCATE PREPARE stmt;-- 释放预处理段
SET sql2 = CONCAT("INSERT IGNORE INTO em_user_relation",self_tab_index,"(user_id,follow_id,type)","VALUES(",userid,',',fansuserid,',',0,")");
SET @sql2 = sql2;
PREPARE stmt1 FROM @sql2;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
UNTIL done END REPEAT;
SELECT sql2; -- 测试sql
CLOSE cur_user;
END
//
- mysql存储过程执行动态sql
- mysql存储过程执行动态sql
- mysql 存储过程动态执行sql 例子
- mysql存储过程执行动态sql语句
- mysql 存储过程 执行动态sql
- mysql存储过程动态执行sql
- MySQL存储过程实现动态执行SQL
- mysql 存储过程动态执行sql
- SQL动态执行存储过程
- mysql 存储过程 根据参数 动态执行sql语句
- mysql存储过程执行动态sql语句并返回值
- 写MySQL存储过程实现动态执行SQL (转)
- MySQL 存储过程中执行动态 SQL 语句
- 写MySQL存储过程实现动态执行SQL (转)
- 写MySQL存储过程实现动态执行SQL (转)
- 写MySQL存储过程实现动态执行SQL
- 写MySQL存储过程实现动态执行SQL
- 写MySQL存储过程实现动态执行SQL
- 排序之直接选择排序
- 判断两个有序数组中是否有相同的数字(第十七周上机任务)
- Android平台实现位图(Bitmap)的序列化和反序列化
- Spring Annotations Cheat Sheet
- Commands out of sync; you can't run this command now错误
- mysql存储过程执行动态sql
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换
- 电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解
- DIY爱好者自制ARM笔记本 只为将项目彻底开源化
- 前端工程师必须掌握的知识点
- Android 面试题(有详细答案)
- Hibernamte一对一经典剖析
- MySQL server has gone away 问题的解决方法
- 【Cocos2d-x游戏引擎开发笔记(15)】Tiled Map Editor(三)