2011-01-10 41 views
20

私は、MySQLデータベースのblobフィールドにイメージデータを格納したテーブルを持っています。 SQLだけを使って、それらのイメージをファイルシステム上のファイルにエクスポートする方法はありますか?イメージの名前は{imageId} .jpgMySQLデータベースからBlobをSQLのみでファイルにエクスポート

これはJavaや他のどのSQLスクリプトでも可能ですがわかりますか?

+0

これはおそらく、MySQLの実行対象ユーザがファイルシステムへの書き込みアクセス権を持っているかどうかによって異なります。 –

+0

もちろん、それは可能ですか?私はfielsystemにアクセスするSQLコマンドを見たことがないので – suicide

答えて

12

私はアイデアを好きではない...エラーにもかかわらず

drop procedure if exists dump_image; 
delimiter // 
    create procedure dump_image() 
    begin 

    declare this_id int; 
    declare cur1 cursor for select imageId from image; 
    open cur1; 
     read_loop: loop 
     fetch cur1 into this_id; 
     set @query = concat('select blob_field from image where imageId=', 
      this_id, ' into outfile "/tmp/xyz-', this_id,'.jpg"'); 
     prepare write_file from @query; 
     execute write_file; 
     end loop; 
    close cur1; 
    end // 
delimiter ; 

あなたが保存したい場所にmysqlユーザーとして書き込み権限を持っていると仮定すると

 
mysql> call dump_image(); 
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed 
ls -1 /tmp/xyz*
+0

あなたは 'this_id'をどこで設定しましたか?あなたは何も渡さなかったし、procに設定されていないので、クエリは失敗するだろう。そうでなければ、これはうまくいくように見える –

+0

カーソルを 'fetch cur1 into this_id;' – ajreal

+3

同意するのは自分自身の考え方が似ていないと思います。私のために破損したファイル –

15

ファイルは、あなたが行うことができます:

Select id,blob into dumpfile '/tmp/path' from table; 

残念ながら、MySQLでは、ダンプファイルを式/変数として指定することはできません。ただし、ストアドプロシージャでラップして変数を使用すると、これを実現できます。

+1

'outfile'の代わりに' dumpfile'を使うと、シリアライズされたJavaオブジェクトが役に立ちます。 –

+0

あなたはそうです、DUMPFILEはoutfileよりも優れているようです – rasputino

関連する問題