画像、音声、ビデオのオブジェクトは、BLOB としてデータベース表に保管することも、サーバー・ファイルに保管することもできます。
オブジェクトをサーバー・ファイルに保管すると、そのファイルがデータベースによってポイントされます。
オブジェクトをクライアント・バッファーまたはクライアント・ファイルから保管する場合には、target_file パラメーターへの指定内容によって、BLOB かサーバー・ファイル記憶域のどちらかを表します。 ファイル名を指定すると、オブジェクトをサーバー・ファイルに保管することを表します。 ファイルにヌル値または空ストリングを指定すると、オブジェクトを BLOB としてデータベース表に保管することを表します。 target_file パラメーターのデータ・タイプは LONG VARCHAR です。 ヌル値を指定する場合には、それを必ず LONG VARCHAR データ・タイプにキャストしてください。
たとえば、C アプリケーション・プログラムの次のステートメントでは、画像を含む行をデータベース表に保管します。 イメージ・ソースは、クライアント・バッファーにあります。 画像はサーバー・ファイルに保管されます。 データベース表はサーバー・ファイルを指しています。
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS BLOB_LOCATOR Img_buf EXEC SQL END DECLARE SECTION; EXEC SQL INSERT INTO EMPLOYEE VALUES( '128557', 'Anita Jones', DB2IMAGE( CURRENT SERVER, :Img_buf, 'ASIS', '/employee/images/ajones.bmp', /* store image in server file */ 'Anita''s picture') );
オブジェクトをサーバー・ファイルから保管する場合には、定数 MMDB_STORAGE_TYPE_INTERNAL を指定して、オブジェクトを BLOB としてデータベース表に保管します。
オブジェクトは保管するが、その内容をサーバー・ファイルに残しておく場合には、定数 MMDB_STORAGE_TYPE_EXTERNAL を指定します。 MMDB_STORAGE_TYPE_INTERNAL は整数値 1 を、MMDB_STORAGE_TYPE_EXTERNAL は整数値 0 をそれぞれもちます。
たとえば、次の C アプリケーション・プログラムでは、音声クリップがサーバー・ファイルに保管されます。 ソースの音声内容はすでにサーバー・ファイルにあります。 保管操作はファイル名をデータベースに置くので、SQL ステートメントによってそのファイルにアクセスできるようになります。
EXEC SQL BEGIN DECLARE SECTION; long hvStorageType; EXEC SQL END DECLARE SECTION; hvStorageType=MMDB_STORAGE_TYPE_EXTERNAL; EXEC SQL INSERT INTO EMPLOYEE VALUES( '128557', 'Anita Jones', DB2AUDIO( CURRENT SERVER, '/employee/sounds/ajones.wav', 'WAVE', :hvStorageType, /* store audio in server file */ 'Anita''s voice') );