画像、音声、ビデオのオブジェクトを保管する場合、形式は、エクステンダーが解釈できるものだけには限定されません。 つまり、独自の形式を指定することができます。 その場合、エクステンダーはその形式を認識できませんので、ソース・オブジェクトの属性をユーザーが指定する必要があります。 属性値は、属性構造体に割り当ててください。 属性構造体は、UDF の LONG VARCHAR FOR BIT DATA 変数のデータ・フィールドに保管しなければなりません。
サーバー上の UDF コードは常に、"ビッグ・エンディアン形式" のデータを期待します。 ビッグ・エンディアン形式とは、ほとんどの UNIX プラットフォームで使用される形式です。 オブジェクトを "リトル・エンディアン形式" で保管する場合、サーバー上の UDF コードが正しく処理できるように、ユーザー指定の属性データを作成する必要があります。 リトル・エンディアン形式は、Intel(R) および他のマイクロプロセッサー・プラットフォームで一般に使用されている形式です。 (オブジェクトをリトル・エンディアン形式で保管していないとしても、ユーザー指定の属性を作成するのは良いことです。) 画像オブジェクトの属性を作成するには DBiPrepareAttrs API を使用します。 音声オブジェクトの属性を作成するには DBaPrepareAttrs API を使用します。 ビデオ・オブジェクトの属性を作成するには DBvPrepareAttrs API を使用してください。
たとえば、C アプリケーション・プログラムの次のステートメントでは、画像を含む行をデータベース表に保管します。 サーバー・ファイルにあるソース画像は、高さが 640 ピクセル、幅が 480 ピクセルのユーザー定義形式です。 属性は画像の保管前に作成されることに注意してください。
EXEC SQL BEGIN DECLARE SECTION; long hvStorageType; struct { short len; char data[400]; }hvImgattrs; EXEC SQL END DECLARE SECTION; DB2IMAGEATTRS *pimgattr; hvStorageType=MMDB_STORAGE_TYPE_INTERNAL; pimgattr = (DB2IMAGEATTRS *) hvImgattrs.data; strcpy(pimgattr>format,"FormatI"); pimgattr>width=640; pimgattr>height=480; hvImgattrs.len=sizeof(DB2IMAGEATTRS); DBiPrepareAttrs(pimgattr); DBEXEC SQL INSERT INTO EMPLOYEE VALUES( '128557', 'Anita Jones', DB2IMAGE( CURRENT SERVER, '/employee/images/ajones.bmp', :hvStorageType, 'Anita''s picture', :hvImgattrs, /* user-specified attributes */ CAST(NULL as LONG VARCHAR) );
C アプリケーション・プログラムの次のステートメントでは、音声クリップを含む行をデータベース表に保管します。 サーバー・ファイルにある音声クリップは、サンプリング率が 44.1 kHz で、2 つのチャネルに録音されたユーザー定義形式です。 オーディオ・クリップは MIDI ではないので、トラック名および楽器に対して空ストリングが指定されます。
EXEC SQL BEGIN DECLARE SECTION; long hvStorageType; struct ( short len; char data[600]; }hvAudattr; EXEC SQL END DECLARE SECTION; MMDBAudioAttrs *paudiattr; hvStorageType=MMDB_STORAGE_TYPE_INTERNAL; paudioattr=(MMDBAudioAttrs *) hvAudattr.data; strcpy(paudioAttr>cFormat,"FormatA"); paudioAttr>ulSamplingRate=44100; paudioAttr>usNumChannels=2; hvAudattrs.len=sizeof(MMDBAudioAttrs); DBaPrepareAttrs(paudioAttr); EXEC SQL INSERT INTO EMPLOYEE VALUES( '128557', 'Anita Jones', DB2AUDIO( CURRENT SERVER, '/employee/sounds/ajones.aud', :hvStorageType, 'Anita''s voice', :hvAudattr) /* user-specified attributes */ );