在mysql存储过程中使用prepare的问题

theenpoal 2016-07-13 11:11:43
场景:将从文件导入mysql数据库的语句写成存储过程,将表名作为变量,以导入的文件名来定义表名,实现的关键语句如下:

IF v_fileName='aaa.csv' THEN
SET @v_table='tab_1';
ELSE
...
END IF;

SET @uploadString= CONCAT(
"LOAD DATA INFILE V_fileName
INTO TABLE ",@v_table,"
CHARACTER SET utf8
FIELDS TERMINATED BY \',\'
OPTIONALLY ENCLOSED BY \'\"\'
LINES TERMINATED BY \'\\r\\n\';"
);
PREPARE uploadString FROM @uploadString;
EXECUTE uploadString;
DEALLOCATE PREPARE uploadString;


执行后得到如下报错信息:
Procedure execution failed
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 'FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED B' at line 3

但是单独调试SELECT CONCAT("...")可以得出
LOAD DATA INFILE 'aaa.csv'
INTO TABLE tab_1
CHARACTER SET utf8
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
的结果。

mysql版本:5.6.21

请问是哪里写错了,请大神们给一个范例,感激不尽。
...全文
208 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2016-07-13
  • 打赏
  • 举报
回复
"LOAD DATA INFILE V_fileName -------------------------------- 你这里面没有把值拼进去啊
theenpoal 2016-07-13
  • 打赏
  • 举报
回复
回复“单独调试出来的 拼接成的语句 运行会报错吗” 不会报错,导入时成功的,单步调试是在 prepare这步就出错了。
  • 打赏
  • 举报
回复
单独调试出来的 拼接成的语句 运行会报错吗
theenpoal 2016-07-13
  • 打赏
  • 举报
回复
引用 4 楼 zjcxc 的回复:
应该是不支持 LOAD DATA http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html 官网的文档上,受支持的语句中没有LOAD DATA
谢谢回复,看来只有把全句作为条件,都写上去了。
zjcxc 2016-07-13
  • 打赏
  • 举报
回复
应该是不支持 LOAD DATA http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html 官网的文档上,受支持的语句中没有LOAD DATA

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧