hash_value、file_name、file_contents、および id の行を含む my_table という名前のテーブルがあります。
ユーザーからハッシュ値を受け取るプログラムがあります。
この値を取得して、ファイルを file_name にダンプする mysql バッチを作成したいと思います
を使用してファイルの内容をダンプするバッチを作成できます
SELECT file_contents INTO DUMPFILE 'myfilename' FROM my_table WHERE hash_value='myhashvalue';
しかし、最初に file_name を取得してコマンドで使用する方法を見つけることができませんでした。また、バッチが失敗したかどうかとその理由をプログラムに知らせる方法も必要です (テーブルにそのようなハッシュがない、ファイルが既に存在するなど)。
疑似コード
@file_name = SELECT file_name FROM my_table WHERE hash_value='myhashvalue';
if @file_name is not empty
SELECT file_contents INTO DUMPFILE @file_name FROM my_table WHERE hash_value='myhashvalue';
// if file exists already then the error gets sent to stdout so I can determine that
else
echo something to stdout so I know the user entered a value not in the table
endif
このバッチを次の方法で実行しています
mysql -h localhost -u theuser -pthepassword mydatabase < mybatch.sql
ありがとうございました
編集: 私は近づいています。を使用してファイル名を設定できます
SELECT @filename:=file_name FROM my_table WHERE hash_value='myhahsvalue';
しかし、次のステートメントでこれを使用しようとするとエラーが発生します
SELECT file_contents INTO DUMPFILE @filename FROM my_table WHERE hash_value='myhashvalue';
SQL 構文にエラーがあります。
編集 2: これを使用して、ファイル名 (ハッシュに基づいて存在する場合) を取得できるようになりました。私はまだエラー報告の部分に取り組んでいますが、これはうまくいきます
SELECT @filename:=file_name FROM my_table WHERE hash_value='myhashvalue';
SET @query:=CONCAT("SELECT file_contents INTO DUMPFILE '",@filename,"' FROM mytable WHERE hash_value='myhashvalue'");
PREPARE stmt FROM @query;
EXECUTE stmt;