Lorsque vous stockez un objet image, audio ou vidéo, vous n'êtes pas limité aux formats reconnus par les extensions. Vous pouvez spécifier votre propre format. Dans la mesure où les extensions ne reconnaissent pas le format, vous devez définir les attributs de l'objet source. Définissez les valeurs des attributs sous forme de structure. La structure d'attributs doit être contenue dans la zone de données de la variable LONG VARCHAR FOR BIT DATA de la fonction UDF.
Le code UDF qui s'exécute sur le serveur attend toujours des données au format "big endian". Ce dernier est utilisé pour la plupart des plateformes UNIX. Dans le cas d'un objet au format "little endian", vous devez préparer les données dont les attributs sont définis par l'utilisateur de sorte que le code UDF sur le serveur puisse les traiter correctement. Le format little endian est, en règle générale, utilisé sur les plateformes Intel et d'autres types de microprocesseurs. (Même si vous n'avez pas recours au format little endian, il est recommandé de préparer les données dont les attributs sont définis par l'utilisateur.) Utilisez l'interface API DBiPrepareAttrs pour préparer les attributs des objets image, l'interface API DBaPrepareAttrs pour les objets audio, et l'interface API DBvPrepareAttrs pour les objets vidéo.
Par exemple, les instructions ci-après, incluses dans un programme d'application en langage C, stockent une ligne contenant une image dans une table de base de données. L'image source qui se trouve dans un fichier du serveur, a un format défini par l'utilisateur, une hauteur de 640 pixels et une largeur de 480 pixels. Notez que les attributs sont préparés avant le stockage de l'image.
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', 'Anne Dupont', DB2IMAGE( CURRENT SERVER, '/Employés/images/adupont.bmp', :hvStorageType, 'Photo d''Anne', :hvImgattrs, /* attributs définis par l'utilisateur */ CAST(NULL as LONG VARCHAR) );
L'instruction ci-après, incluse dans un programme d'application en langage C, stocke une ligne contenant une séquence audio dans une table de base de données. La séquence audio source, qui se trouve dans un fichier du serveur, a un format défini par l'utilisateur, une fréquence d'échantillonnage de 44,1 kHz, et comporte deux canaux enregistrés. Le clip audio n'étant pas de type MIDI, des chaînes vides sont indiquées pour les noms de pistes et les instruments.
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', 'Anne Dupont', DB2AUDIO( CURRENT SERVER, '/Employés/sons/adupont.aud', :hvStorageType, 'Voix d''Anne', :hvAudattr) /* attributs définis par l'utilisateur */ );