私はinformixデータベースにバイナリBLOBフィールド(jpg)としてイメージをいくつか持っていますが、どのようにイメージをSQLでディスクに書き込むことができますか?InformixのディスクにバイナリBLOBを書き込む方法
答えて
データはBYTEフィールドまたはBLOBフィールドに格納されていますか?データがBLOB列に格納されている場合
、あなたが使用することができます。データはBYTE列に格納され
SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
FROM TheTable
WHERE PK_Column = 23411 -- PK value
場合は、かなり難しい仕事をしなければなりません。マシンにESQL/C(ClientSDK)とCコンパイラがある場合は、IIUG Software ArchiveからSQLCMDを入手し、ソフトウェアを抽出することをお勧めします。 Informix環境が必要です.Cプログラムをコンパイルできる必要があります。その後、実行します。
./configure --prefix=$HOME/bin
をそれはあなたが接頭辞として指定したものをあまり問題ではない - あなただけのconfigureスクリプトを実行する必要があります。
すべてをコンパイルするか(make
)、プログラムselblob
(make selblob
)をコンパイルするだけです。そのプログラムは私が「ビネット」と呼んでいるものです。ディスクにBYTE BLOBを選択する方法を示す顕微鏡プログラムです。しかし、それは完全に機能しています。それはあなたがそれに投げたり、エラーを診断したりすることに関してはうまくいくでしょう。
データベースがprecious
呼び出された場合は、バイトデータは表byte_table
であり、データを保持するカラムがbyte_column
で、主キー列がcol1
ある(そして必要な値が23
ある)とcol2
(および必要な値)"Habeas Corpus"
あり、その後、次のコマンドを実行します。
selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
-c byte_column -f output_file
これはという名前のファイルにバイト値をアンロードします。
ESQL/CまたはCコンパイラを使用していない場合、またはそれらを使用する権限がない場合、人生はより困難です。最接近は、DB-AccessでUNLOAD文を使用することです:
dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!
これは、バイト値(文字あたり2バイト)の進ダンプを含むファイルを作成します。その後、ファイルを後処理してヘキサを通常のデータに変換する必要があります。列がBYTE列ではなくTEXT列であった場合、変換は必要ないことに注意してください。あなたは(メモリに丸呑みできるほど小さいファイルを提供 - あなたはそれが十分に小さくない場合には難しい仕事をしなければならない)の変換を行うにはかなり単純なPerlスクリプトを使用することができます。
perl -w -e '
$/ = "";
my $data = <>;
while (length($data) > 1)
{
my $hex = substr($data, 0, 2);
printf "%c", hex($hex);
$data = substr($data, 2);
}' <output_file
長条件が指定します " > 1
'を使用して、アンロードされたデータの最後に改行を処理します。
(ヒステリックレーズン、別名「歴史的な理由」の場合、IDS 9.00では「スマートブロブ」の明示的な名前、わずかに異なるペアが導入されましたが、BYTEとTEXTの両方のBLOBタイプが呼び出されます)私の本ではBLOB(小文字)のすべての型ですBLOBおよびCLOBのブロブが出現する前の6年以上の1990年にBYTEおよびTEXTブロブについて学んだ老人たちの問題です追加されました。 いずれの場合でも、古いスタイルのブロブには、代わりの正式な用語がありません。 「ダムの塊」を使用することは政治的に正しいではありません!)
データベースにクエリを行い、ブロブをディスクに保存する小さなプログラムを作成する必要があります。ほとんどのデータベースには、「ディスク上のファイルを開く」という概念はありません。
私はあなたが非常識JONだ私は、MySQL – levhita
に慣れていると思います...私も、そしてもちろんそのはその何かを得た場合、あなたの答えになるだろう、この答えを必要とinformixとの関係 – CheeseConQueso
LOTOFILEは、少なくともInformix 12.10ではBYTEカラムでも動作するようです。 すべての便利なInformixのポストをありがとう、Informixで何かを検索するたびにあなたの名前がポップアップします:) – Otherside