当您存储图象、音频或视频对象时,将不限制您只使用 Extender 理解的格式。您可以指定您自己的格式。因为 Extender 不理解该格式,所以必须指定源对象的属性。在属性结构中指定属性值。必须将属性结构存储在 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 k,并有两个录制声道。音频剪辑不是 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 */ );