Content UDF を使えば、形式変換をせずに、画像、音声、ビデオのオブジェクトをサーバー・ファイルに取り出すことができます。 さらに、Content UDF によって、画像を形式変換してサーバー・ファイルに取り出すこともできます。
画像、音声、ビデオのオブジェクトを変換せずにサーバーのファイルへ取り出す場合には、オブジェクトのハンドル、ターゲット・ファイルの名前、重ね書き標識を指定します。 重ね書き標識は、ターゲット・ファイルがサーバーにすでにある場合、取り出したデータでそのファイルを重ね書きするかどうかをエクステンダーに知らせます。
ターゲット・ファイルが存在しなければ、エクステンダーは、ターゲット・ファイルをサーバーに作成します。
重ね書き標識の値として 1 を指定すると、エクステンダーは、取り出したデータでターゲット・ファイルを重ね書きします。 重ね書き標識の値として 0 を指定すると、エクステンダーは、ターゲット・ファイルを重ね書きしないので、データは取り出されません。
取り出すオブジェクトが BLOB としてデータベース表に保管されている場合には、重ね書き標識は無視されます。 ターゲット・ファイルは、重ね書き標識の指定が何であれ、作成または重ね書きされます。
オブジェクトをサーバー・ファイルに取り出すと、そのサーバー・ファイルの名前が戻されます。 たとえば、C アプリケーション・プログラムの次のステートメントでは、ビデオがサーバーのファイルに取り出されます。 サーバーのファイル名は、ホスト変数 hvVid_fname に保管されます。
EXEC SQL BEGIN DECLARE SECTION; struct{ short len; char data[250]; }hvVid_fname[; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT CONTENT( VIDEO, /* video handle */ '/employee/videos/ajones.mpg', /* server file */ 1) /* overwrite target file */ INTO :hvVid_fname; FROM EMPLOYEE WHERE NAME = 'Anita Jones';
オブジェクトが BLOB としてデータベース表に保管されている場合、そのオブジェクトを変換せずにサーバー・ファイルに取り出すには、Content UDF を使用するのが適切です。 オブジェクトがサーバー・ファイルに保管されている場合には、ソース・ファイルの内容をターゲット・ファイルにコピーする方が効率的かもしれません。
画像を形式変換してサーバーのファイルに取り出す場合には、画像ハンドル、ターゲット・ファイルの名前、ターゲットの重ね書き標識、ターゲット形式を指定します。 どの変換が可能かについては、表 4 を参照してください。 ターゲットの形式には、ヌル値か空ストリング、またはストリング ASIS を指定することができます。 この場合には、取り出された画像の形式はソースと同じになります。
たとえば、C アプリケーション・プログラムの次のステートメントでは、画像がサーバーのファイルに取り出されます。 ソース・イメージはビットマップ形式で、データベース表に BLOB として保管されています。 取り出された画像は GIF 形式に変換されます。 サーバー・ファイルのファイル名は、ホスト変数 hvImg_fname に保管されます。
EXEC SQL BEGIN DECLARE SECTION; struct{ short len; char [400]; }hvImg_fname[; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT CONTENT( PICTURE, /* image handle */ '/employee/images/ajones.gif', /* target file */ 1, /* overwrite target file */ 'GIF') /* target format */ INTO :hvImg_fname FROM EMPLOYEE WHERE NAME = 'Anita Jones';
サーバー・ファイルがアクセス可能でなければなりません: オブジェクトをサーバー・ファイルに取り出す場合には、そのターゲット・ファイルの完全修飾名を指定する必要があります。または、DB2IMAGEEXPORT、DB2AUDIOEXPORT、および DB2VIDEOEXPORT 環境変数を適切に設定することによって、不完全なファイル名の指定を解決できなければなりません。