暂无图片
mysql一个问题,自己拼接出来的动态sql怎么执行,下述写法只能执行一条,加循环也不行?
我来答
分享
暂无图片 匿名用户
mysql一个问题,自己拼接出来的动态sql怎么执行,下述写法只能执行一条,加循环也不行?
drop PROCEDURE P_BACKUP;
create PROCEDURE P_BACKUP()
BEGIN 
DECLARE i INT;  # 申明变量
SET i = 0;  # 变量赋值
WHILE i<5 DO # 结束循环的条件: 当i大于5时跳出while循环
select @Sql:=concat('create table vendor_moodle_hs.',table_name,'_hs as select *,now() as etl_date from vendor_moodle.',table_name,';') from information_schema.tables where table_schema='vendor_moodle' and table_type='base table' and table_name  like 'mdl_%';
prepare stmt from @Sql;
execute stmt;
deallocate prepare stmt;
SET i = i+1;    # 循环一次,i加1
END WHILE;  # 结束while循环
END;
call P_BACKUP()

复制
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
严少安
暂无图片

这里的now()未生效,被包在字符串里了
select @Sql:=concat ... now()

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
DarkAthena
2022-01-13
他是想把基于这个查询条件的所有表都备份一次,在这个逻辑里有没有now()都没关系,now()只是作为备份表上的一个备份日期进行记录
DarkAthena

这与now()在里面还是外面没有关系。他是想拼出下面这些sql,一条一条去执行

create table vendor_moodle_hs.表1_hs as select *,now() as etl_date from vendor_moodle.表1; create table vendor_moodle_hs.表2_hs as select *,now() as etl_date from vendor_moodle.表2; create table vendor_moodle_hs.表3_hs as select *,now() as etl_date from vendor_moodle.表3; create table vendor_moodle_hs.表4_hs as select *,now() as etl_date from vendor_moodle.表4;
复制

首先你这个查询条件,是查出来有多条记录还是只有一条记录?

如果是多条记录的话,你@sql参数接收的是什么东西?用i来循环的话,这个i又没有在循环里用到,这有什么用?

正确的做法应该是,在循环里拼sql,一次只拼一个表,那么很明显,你应该用这个sql查出来的表名作为游标,来循环执行拼接

暂无图片 评论
暂无图片 有用 0
打赏 0
严少安
2022-01-13
now在里面是定量,执行不了啊
DarkAthena
答主
2022-01-13
这只是拼一个动态sql的字符串而已,now()不必要在外面执行,now()没有影响任何有关循环的逻辑
回答交流
Markdown


请输入正文
提交
相关推荐
MySQL dump 可以直接导出分区数据吗?按分区名来
回答 2
已采纳
mysqldump是逻辑导出,只有表创建语句和数据。除此之外可以使用mysqldumpwhere条件导出数据。
在MySQL里如何执行OS命令?
回答 1
已采纳
可以通过system或“\!”来执行。
Mysql关于group by添加索引的疑问
回答 3
已采纳
所谓最好的三星索引1、过滤性好,能过滤掉较多的行2、索引覆盖3、SQL的排序也刚好是索引的排序满足以上三点,就是最好的三星索引了。但从你的SQL来看。1与3肯定不能同时满足了。要么满足1,2,要么满足
安装MySQL端口被占,删除后还是未安装成功
回答 1
那说明你删除的时候服务还是开着的,要关数据库再删除
mysql 语句放存储结构报无效数字,单独拿出来又没问题,这是什么原因?
回答 1
你dump导出一下看看。
这个参数 loose-group_replication_group_seeds,请教一下能不能通过脚本指定的?
回答 1
可以的
abcddce2dfd2dfadf2f 这个字符串在mysql数据库中有没有可以取出来第二个2位置的函数?
回答 1
selectsubstr(substr(‘ab2cde2fgh2p’,instr(‘ab2cde2fgh2p’,‘2’)1),instr(substr(‘ab2cde2fgh2p’,instr(‘ab
查询 mysql 数据库记录时,如果存在多个索引, mysql 是选择最优的一个来使用,还是合并所有索引来执行呢?
回答 2
大多数情况都是选择最优。
mysql in()里面的数量,最多是不是1000个记录?
回答 4
已采纳
in没有限制;不过对整段sql语句的长度有限制(maxallowedpacket)
怎么同时从多个mysql 捞取数据导入到excle?
回答 1
已采纳
先多源复制汇总到一个mysql,然后再到excel。我估计你困难是汇总,而不是单一mysql到excel。如果说mysql到excel都困难,这个可以查百度。
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~