Оператор mysql в сценарии оболочки bash не работает / синтаксическая ошибка

надеюсь, кто-то может мне помочь! Я не знаю, что не так с этим скриптом (Bash / Ubuntu 12.04 / Mysql / XAMPP 1.8.3). Попробуйте прочитать входной файл со списком имен файлов csv (449-R11, 449-R12 ..), чтобы выполнить некоторые sql-операторы ....

    #!/bin/bash

     OUTPath="/home/bono/RD/BV-OUT/tmp/distinct_"
     OUTPath1="/home/bono/RD/BV-OUT/tmp/load_"
     INPath="/home/bono/RD/BV-OUT/"

     while read line do
     RD="$line"
     bv_out_distinct=$OUTPath$RD
     bv_out_load_new_bvs=$OUTPath1$RD
     RDDATEI=$INPath$RD

     ###MYSQLs:
     /opt/lampp/bin/mysql --local-infile --user=root RD << EOF 
     LOAD DATA LOCAL INFILE $RDDATEI 
       INTO TABLE bv_tmp_all FIELDS TERMINATED BY ';';
     SELECT * FROM bv_tmp_all GROUP BY BAN 
       INTO OUTFILE $bv_out_distinct FIELDS TERMINATED BY ';' ;
     LOAD DATA LOCAL INFILE $bv_out_distinct 
       INTO TABLE bv_tmp_distinct FIELDS TERMINATED BY ';';
     UPDATE bv, bv_tmp_distinct 
       SET bv.RD=bv_tmp_distinct.RD,bv.LEV21=bv_tmp_distinct.LEV21 
       WHERE bv.BAN=bv_tmp_distinct.BAN;
     SELECT * FROM bv_tmp_distinct 
       WHERE BAN NOT IN (SELECT BAN FROM bv) 
       INTO OUTFILE $bv_out_load_new_bvs FIELDS TERMINATED BY ';';
     LOAD DATA LOCAL INFILE $bv_out_load_new_bvs 
       INTO TABLE bv FIELDS TERMINATED BY ';';
     TRUNCATE TABLE bv_tmp_distinct;
     TRUNCATE TABLE bv_tmp_all;
     EOF
     ##### EOSQL
     done < /home/bono/RD/BV-OUT/allto468

Я пробовал разные версии :(, ничего не получалось .... Я получаю этот вывод mysql:

bono@bono-S3210SH:~/RD/procs$ ./load_RD_out_tmp

ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; 
  check the manual that corresponds to your MyS INTO TABLE bv_tmp_all FIEL' 
  at line 1 to use near '"LOAD DATA LOCAL INFILE /home/bono/RD/BV-OUT/449-R11
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; 
  check the manual that corresponds to your MyS INTO TABLE bv_tmp_all FIEL' 
  at line 1 to use near '"LOAD DATA LOCAL INFILE /home/bono/RD/BV-OUT/449-R12
1
задан 7 February 2014 в 19:46

1 ответ

Ваши имена файлов должны быть экранированы кавычками - MySQL считает их строками, поэтому ваш блок MySQL должен быть:

LOAD DATA LOCAL INFILE '$RDDATEI' 
  INTO TABLE bv_tmp_all FIELDS TERMINATED BY ';';
SELECT * FROM bv_tmp_all GROUP BY BAN 
  INTO OUTFILE '$bv_out_distinct' FIELDS TERMINATED BY ';';
LOAD DATA LOCAL INFILE '$bv_out_distinct'
  INTO TABLE bv_tmp_distinct FIELDS TERMINATED BY ';';
UPDATE bv, bv_tmp_distinct 
  SET bv.RD=bv_tmp_distinct.RD,bv.LEV21=bv_tmp_distinct.LEV21 
  WHERE bv.BAN=bv_tmp_distinct.BAN;
SELECT * FROM bv_tmp_distinct 
  WHERE BAN NOT IN (SELECT BAN FROM bv) 
  INTO OUTFILE '$bv_out_load_new_bvs' FIELDS TERMINATED BY ';';
LOAD DATA LOCAL INFILE '$bv_out_load_new_bvs' 
  INTO TABLE bv FIELDS TERMINATED BY ';';
TRUNCATE TABLE bv_tmp_distinct;
TRUNCATE TABLE bv_tmp_all;
0
ответ дан 7 February 2014 в 19:46

Другие вопросы по тегам:

Похожие вопросы: