我将数据加载到存储过程内的表中,该存储过程的文件名作为参数传递。
select @load_config:= concat('load data local infile ',config_file,' into table config fields terminated by \',\' lines terminated by \n');
prepare stm from @load_config;
为此我收到错误
错误1064(42000):您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在'/mnt/appln/mysql/dvdbuser/config.csv附近使用正确的语法到由',''在第1行终止的表配置字段 我也试过这个
select @load_config:= concat('load data local infile \'',config_file,'\' into table config fields terminated by \',\' lines terminated by \n');
prepare stm from @load_config;
我得到了错误
说实话,我迷路了,我不知道我在哪里搞砸了错误1064(42000):您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的''附近使用正确的语法
答案 0 :(得分:1)
您应该使用SET为变量赋值:
SET @load_config:= concat('load data local infile ',config_file,' into table config
fields terminated by \',\' lines terminated by \n');
答案 1 :(得分:1)
\
是转义序列的开始。
第一个问题很可能是缺少单引号。因此,当您执行\'
时,它会转换为单引号,从而终止未关闭的块。由于它现在已关闭,因为保留了字符串片段而导致语法错误。你需要做\\'
,这会带来斜线,而不是之后的单引号。
请参阅Mysql手册页,了解String Literals处的转义序列表。
即使如此,整件事也行不通。因为存储过程,事件等不支持LOAD DATA INFILE
。这是一件令人伤心的事,但据称是出于安全原因。它会产生42000或类似的错误。
错误:预准备语句中不支持此命令 协议
一种解决方法是使用UDF,它需要你修改你的mysql环境,或为我这样做的琐碎事情创建一个外部进程。