0

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;
4

2 に答える 2

0

私は「最善の」解決策ではありませんが、 --verbose を追加し、最後に 2>&1 を追加して、stderr を stdout にリダイレクトします。その後、エラー コードのテキストを解析できます。ERROR 1064 無効なハッシュが入力された場合、mysql は実行に失敗します ファイルが既に存在する場合は ERROR 1086 ご覧いただきありがとうございます

于 2013-09-13T11:57:14.883 に答える