【问题标题】:Mysql CONCAT error when loading data加载数据时Mysql CONCAT错误
【发布时间】:2018-07-20 15:32:41
【问题描述】:

我正在开发一个 sql 脚本,它将存储在 S3 存储桶中的 .csv 文件加载到 RDS 数据库中。在不使用CONCAT 时,LOAD 命令可以完美运行。我正在使用CONCAT 在语句中包含变量。我认为问题出在一个或多个条款上。为了故障排除,我显着缩短了这些字段。我尝试了几种不同的方法,但似乎无法获得正确的语法。

set @s3intotemp = CONCAT('
LOAD DATA FROM S3 PREFIX "`',@workingdir, '`"
INTO TABLE `',@rndtable, '` 
FIELDS TERMINATED BY ","
ESCAPED BY ""
ENCLOSED BY "\""
LINES TERMINATED BY "\n"
(@col1,
@col2) 
SET customer=@col1,
firstname=@col2;
');
PREPARE stmt from @s3intotemp;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我收到以下错误:

SQL 错误:您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 '" (@col1, @col2 ) SET customer=@col1, firstname=@col2' at line 6

【问题讨论】:

    标签: mysql sql variables concat


    【解决方案1】:

    您需要对字符串中的反斜杠进行转义,以便将其变为连接的结果。

    set @s3intotemp = CONCAT('
    LOAD DATA FROM S3 PREFIX "`',@workingdir, '`"
    INTO TABLE `',@rndtable, '` 
    FIELDS TERMINATED BY ","
    ESCAPED BY ""
    ENCLOSED BY "\\\""
    LINES TERMINATED BY "\\n"
    (@col1,
    @col2) 
    SET customer=@col1,
    firstname=@col2;
    ');
    

    【讨论】:

    • 这又产生了一个错误。 SQL 错误:准备好的语句协议尚不支持此命令。我想也许问题可能是语句试图将 col1 和 col2 中的 at 符号解释为变量。我尝试转义 \@col1 和 \@col2,但这也不起作用。
    • 我认为这意味着您不能将 LOAD DATA FROM S3 与准备好的语句一起使用。
    • 我相信你对准备好的陈述是正确的。 ENCLOSED BY 中的 \\\\ 是正确的还是应该只是 \\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2016-02-14
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多