14

Load data Infileのファイル名を変数にしたい。以下のコードを実行します。

Set @d1 = 'C:/Users/name/Desktop/MySQL/1/';
Set @d2 = concat( @d1, '20130114.txt');
load data local infile  @d2  into table Avaya_test (Agent_Name, Login_ID,ACD_Time);

残念ながら、実行後、次のようなコメント付きのエラーがあります。「エラー コード: 1064。SQL 構文にエラーがあります ......」

このコードでは、変数 "@D2" に下線が引かれているため、この変数が原因でこのエラーが発生したことを意味します。

LOAD DATA @variable infile でファイル名の変数を正しく定義する方法を教えてください。

ありがとうございました。

4

5 に答える 5

5

通常、直接行うことはできませんが、一時ファイルを使用できます。

この手順は、PREPARE-EXECUTE の組み合わせを使用する場合と似ています。LOAD DATA INFILE で PREPARE を使用できないことに注意してください。このため、一時ファイルが必要です。

今日の日付でファイルを読み取る方法の例を次に示します。

SET @sys_date = CURRENT_DATE();

SET @trg_file = CONCAT("LOAD DATA INFILE '/home/data/file-",@sys_date, "' INTO TABLE new_data FIELDS TERMINATED BY ' ';");

SELECT @trg_file INTO OUTFILE '/tmp/tmp_script.sql';

SOURCE /tmp/tmp_script.sql;

警告: mysql でファイルを上書きすることはできません。このため、一時ファイルが存在してはなりません。前の例を自動化したい場合、これは深刻な問題です。

于 2015-08-13T11:46:08.900 に答える
2

残念ながら、これは mysql では不可能のようです。

Binary Alchemist's answerに加えて、このリストにないため、事前にペアリングされたステートメントでも使用できません: SQL Syntax Allowed in Prepared Statements

外部の何かを使用して、load data infile ステートメントを生成し、SQL を実行できます。たとえば、Excel で作成できます。

于 2014-04-14T01:48:57.300 に答える
1

変数はサーバーによって解釈され、ファイルは mysql クライアントによって読み取られるため、この sysntax は機能しません。したがって、クライアントの @d2 は不正なファイル名です。

于 2013-06-11T04:10:18.107 に答える
0

私のソリューションは、Linux/Mac/[Windows with bash] (例: cygwin) で動作します。

load.tpl などのロード SQL を使用してテンプレートを作成します--%FILENAME%プレースホルダーに注意してください

LOAD DATA LOCAL INFILE '/path/to/data/%FILENAME%'
INTO TABLE Avaya_test ( Agent_Name, Login_ID, ACD_Time );

次に、次のコマンドを実行します。

for n in `ls *.txt`; do echo $n; sed -e 's/%FILENAME%/'$n'/g' load.tpl | mysql -u databaseUser databaseName; done
于 2017-11-30T11:46:05.093 に答える