2016-07-07 6 views
0

ファイル名がパラメータとして渡されるストアドプロシージャ内のテーブルにデータをロードしています。このため は、ロードデータinfileを使用してエラーの原因を認識できません

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; 

iは

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1

iが失われていると私がどこかわからない正直に言うと、エラー、私はエラーを得ているため

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '/mnt/appln/mysql/dvdbuser/config.csv into table config fields terminated by ',' ' at line 1 i tried this as well

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; 

を取得しています私はうんざりしています

答えて

1

\はエスケープシーケンスの始まりです。

最初の問題は、一重引用符をエスケープしない可能性が最も高いことです。したがって、\'を実行すると、一重引用符に変換され、閉じられていないブロックが終了します。現在閉じているので、残っている文字列フラグメントのために構文エラーが発生します。 \\'を実行するとスラッシュが表示され、その後に単一引用符が表示されません。

エスケープシーケンスのテーブルについては、String LiteralsのMysqlマニュアルページを参照してください。

でも、この全体が機能しません。 LOAD DATA INFILEはストアドプロシージャ、イベントなどでサポートされていないためです。それは悲しいことですが、セキュリティの理由から疑いがあります。それはエラー42000または同様のものを生成します。

Error: This command is not supported in the prepared statement protocol yet

この問題を回避するには、MySQLの環境を変更するために、または私は何をすべきかである、そのような些細な事柄のための外部プロセスを作成する必要がUDFのを使用することです。

+0

はい、私はその問題に遭遇しました、私はパラメータとしてファイルを渡したいと思いました。 – avz2611

1

変数に値を代入する:

SET @load_config:= concat('load data local infile ',config_file,' into table config 
    fields terminated by \',\' lines terminated by \n'); 
+0

問題の 'SET'部分が完全に見逃されました。このサイトでのあなたの努力のためにあなたに報いるために、私はあなたをストーカーしています。 – Drew

関連する問題