wwwgzgzgz 2022-01-27 15:32 采纳率: 100%
浏览 124
已结题

mysql存储过程在循环里写用字符串拼接的sql语句

mysql存储过程用concat连接字符串做多连接几个?我在里面一个循环片段里要写一个语句给多个表插值,表名是变量所以只能用concat连接成一个sql语句,后面j也是变量,不知道为什么会报错,这个语句我提取出来能正常运行,不知道为什么用concat拼接后报错

代码片段如下:
SET j = 0;
WHILE j<num2 DO
IF j<10 THEN
SET table_name = CONCAT('t_UserLog0',j);
ELSE
SET table_name = CONCAT('t_UserLog',j);
END IF;

SET @a = CONCAT(
'CREATE TABLE ',table_name,'(
店长编号 VARCHAR(255),店长姓名 VARCHAR(255),报单中心 VARCHAR(255),报单中心姓名 VARCHAR(255),订单号 VARCHAR(255),订单状态 VARCHAR(255),存货编码 VARCHAR(255),存货名称 VARCHAR(255),数量 VARCHAR(255),收货人 VARCHAR(255),联系方式1 VARCHAR(255),联系方式2 VARCHAR(255),省 VARCHAR(255),市 VARCHAR(255),区 VARCHAR(255),详细地址 VARCHAR(255),期数 VARCHAR(255),订单类型 VARCHAR(255),发货仓 VARCHAR(255),创建时间 VARCHAR(255),支付时间 VARCHAR(255),发货时间 VARCHAR(255),商品单价 VARCHAR(255),商品金额 VARCHAR(255),运费 VARCHAR(255),快递公司 VARCHAR(255),快递单号 VARCHAR(255),发货方式 VARCHAR(255),会员备注 VARCHAR(255),发货状态 VARCHAR(255))ENGINE=Innodb default charset=utf8;'
);
PREPARE create_stmt FROM @a;
EXECUTE create_stmt;

SET @b = CONCAT(
'INSERT INTO',table_name,'SELECT * FROM test4 WHERE 报单中心=(SELECT 报单中心 FROM test5 LIMIT ',j,',1);'
);
PREPARE insert_stmt FROM @b;
EXECUTE insert_stmt;

SET j = j+1;
END WHILE;

报错信息:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM test4 WHERE 报单中心=(SELECT 报单中心 FROM test5 LIMIT 0,1)' at line 1

img

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-01-27 16:53
    关注

    你拼的这段sql少了空格,导致关键词都连到一起去了,所以提示语法错误

    'INSERT INTO',table_name,'SELECT 
    

    建议在执行动态sql前,先打印出你拼接好的sql字符串,确认无误后再加上执行此动态sql的命令

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 1月27日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效