Extensions Image, Audio et Vidéo Administration et programmation

Transmission des objets LOB

Plusieurs méthodes permettent de transférer les objets LOB, tels que les images, les séquences audio et vidéo entre votre application et une base de données DB2. Le choix de la méthode de transfert dépend de l'emplacement source et cible de l'objet : vers un fichier ou à partir de celui-ci ; dans une mémoire tampon ou à partir de celle-ci sur un poste client ou serveur de bases de données.

Si l'objet est transféré entre une table et un fichier du serveur

Lorsque vous effectuez un transfert d'objet entre une table de base de données et un fichier du serveur, indiquez le chemin du fichier dans la requête de la fonction UDF de l'extension appropriée. Etant donné que la fonction UDF et le fichier se trouvent sur le serveur, l'extension peut localiser le fichier. Par exemple, dans l'instruction SQL ci-après, une image dont le contenu se trouve dans un fichier du serveur est stockée dans la table de la base de données.

EXEC SQL BEGIN DECLARE SECTION;
long hvStorageType;
  EXEC SQL END DECLARE SECTION;
 
hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
        '128557',
      'Anne Dupont',
        DB2Image(
          CURRENT SERVER,
          '/Employés/images/adupont.bmp',
                   'ASIS',
          :hvStorageType,
          'Photo d''Anne')
       );

Si l'objet est transféré dans une mémoire tampon client ou à partir de celle-ci

DB2 Extensions ne peut pas accéder directement à une mémoire tampon. Si vous voulez effectuer un transfert d'objet dans une mémoire tampon de votre machine ou à partir de celle-ci, vous pouvez simplement indiquer l'adresse de la mémoire tampon. Vous pouvez faire transiter l'objet via une variable SQL. C'est le mode normal de transfert des objets entre une application et une base de données DB2.

Les variables SQL pour les objets LOB s'utilisent et se définissent de manière analogue à celle des objets alphanumériques et numériques classiques. Vous devez déclarer les variables SQL dans une section DECLARE, leur attribuer des valeurs pour la transmission ou accéder à des valeurs qui leur sont transmises.

Lorsque vous déclarez une variable SQL pour des données de type image, audio ou vidéo, indiquez BLOB comme type de données. Lorsque vous utilisez une fonction UDF pour stocker, extraire ou mettre à jour un objet, vous devez indiquer la variable SQL appropriée comme argument dans la requête UDF. Utilisez le même format que pour les autres variables spécifiées dans l'instruction SQL.

Par exemple, les instructions SQL suivantes déclarent et utilisent une variable SQL appelée hvaudio pour transférer une séquence audio à une base de données :

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB (2M) hvaudio;
  EXEC SQL END DECLARE SECTION;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
        '128557',
      'Anne Dupont',
        DB2Audio(
          CURRENT SERVER,
          :hvaudio,
                 'WAVE',
CAST(NULL as LONG VARCHAR),
          'Voix d''Anne Dupont')
       );

Utilisation des releveurs de coordonnées LOB

Les objets LOB, tels que les séquences audio et vidéo, peuvent être de très grande taille, et l'utilisation de variables risque de ne pas constituer le meilleur moyen de les manipuler. L'utilisation du releveur de coordonnées LOB peut en revanche s'avérer plus efficace pour la manipulation d'objets LOB dans vos applications.

Le releveur de coordonnées LOB est une valeur faible (4 octets) stockée dans une variable SQL, qui peut être utilisée par votre programme pour identifier un objet LOB de grande taille situé dans la base de données DB2. Lorsque vous utilisez un releveur de coordonnées LOB, votre programme peut manipuler l'objet LOB comme si ce dernier était stocké dans une variable SQL normale. La différence réside dans le fait qu'il n'est plus nécessaire d'effectuer le transfert de l'objet LOB entre le serveur de bases de données et l'application se trouvant sur la machine client. Par exemple, lorsque vous sélectionnez un objet LOB dans une table de base de données, ce dernier reste sur le serveur et le releveur de coordonnées LOB est transféré sur le poste client.

Vous déclarez un objet LOB dans la section DECLARE et vous l'utilisez de la même manière que la variable SQL. Lorsque vous déclarez un releveur de coordonnées LOB pour des données image, audio ou vidéo indiquez BLOB_LOCATOR comme type de données. Par exemple, les instructions SQL suivantes déclarent et utilisent un releveur de coordonnées LOB appelé video_loc pour extraire une séquence vidéo provenant d'une table de bases de données :

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_LOCATOR video_loc;
  EXEC SQL END DECLARE SECTION;
 
EXEC SQL SELECT CONTENT(VIDEO)
     INTO :video_loc
       FROM EMPLOYEE
       WHERE NAME='Anne Dupont';

Utilisation de releveurs de coordonnées LOB par les fonctions UDF :  Les fonctions UDF d'extensions DB2 qui stockent, extraient et mettent à jour des objets image, audio et vidéo utilisent des releveurs de coordonnées LOB. Dans la version 1 de DB2 Extensions, ces fonctions UDF ne faisaient pas appel à des releveurs de coordonnées LOB. Elles ne pouvaient donc pas traiter des objets dont la taille était supérieure à 2 Mo. Cette restriction obligeait les utilisateurs à transférer de tels objets par segments. Or ce n'est plus le cas grâce aux releveurs de coordonnées LOB.

Si l'objet est transféré dans un fichier client ou à partir de celui-ci

Utilisez une variable de référence à un fichier pour transférer les objets dans un fichier sur un client ou à partir de ce fichier.

La variable de référence à un fichier est déclarée dans une section DECLARE et est utilisée de manière analogue à une variable SQL. Lorsque vous déclarez une variable de référence à un fichier pour des données de type image, audio ou vidéo, indiquez BLOB_FILE comme type de données. Contrairement à la variable SQL qui contient l'ensemble du contenu d'un objet, la variable de référence à un fichier ne contient que le nom du fichier. La taille du fichier ne peut pas excéder celle de l'objet BLOB défini pour la fonction UDF.

Plusieurs options s'offrent à vous pour l'utilisation d'une variable de référence à un fichier d'entrée et de sortie. Sélectionnez l'option de votre choix en définissant la zone FILE_OPTIONS dans la structure de la variable de référence à un fichier de votre programme. Choisissez l'une des options suivantes :

Options en entrée : 

SQL_FILE_READ. Vous pouvez ouvrir ce fichier, y accéder en lecture et le refermer. La longueur des données du fichier (en octets) est déterminée à l'ouverture du fichier. La zone longueur_données de la structure de la variable de référence à un fichier contient la longueur du fichier (en octets).

Options en sortie : 

SQL_FILE_CREATE. Cette option permet de créer un fichier s'il n'existe pas déjà. S'il existe, vous recevez un message d'erreur. La zone longueur_données de la structure de la variable de référence à un fichier contient la longueur du fichier (en octets).
SQL_FILE_OVERWRITE. Cette option permet de créer un fichier s'il n'existe pas déjà. Si le fichier existe, les données contenues dans le fichier sont remplacées par les nouvelles données. La zone longueur_données de la structure de la variable de référence à un fichier contient la longueur du fichier (en octets).
SQL_FILE_APPEND. Cette option permet d'ajouter les données de sortie au fichier si ce dernier existe déjà. Si ce n'est pas le cas, elle crée un nouveau fichier. La zone longueur_données de la structure de la variable de référence au fichier contient la longueur des données ajoutées au fichier (en octets), mais pas la longueur totale du fichier.

Par exemple, les instructions suivantes déclarent une variable de référence à un fichier appelée Fichier_Img qui servira à stocker une image dont le contenu se trouve dans un fichier client, dans la table de base de données. Notez l'affectation de SQL_FILE_READ dans la zone FILE_OPTIONS :

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_FILE Img_file;
  EXEC SQL END DECLARE SECTION;
 
strcpy (Fichier_Img.name,"/Employés/images/adupont.bmp");
Img_file.name_length=strlen(Img_file.name);
Fichier_Img.file_options=SQL_FILE_READ;
 
EXEC SQL INSERT INTO EMPLOYEE VALUES(
        '128557',
      'Anne Dupont',
        DB2Image(
          CURRENT SERVER,
          :Fichier_Img,
                   'ASIS',
CAST(NULL as LONG VARCHAR),
          'Photo d''Anne')
       );

Noms des fichiers lors du transfert des objets

DB2 Extensions autorise une certaine souplesse quant à l'attribution des noms de fichier lors du stockage, de l'extraction et de la mise à jour d'objets.

Bien que vous puissiez indiquer un nom qualifié complet (c'est-à-dire le chemin d'accès complet suivi du nom du fichier), il est préférable d'indiquer un nom de fichier relatif lors des opérations de stockage, d'extraction et de mise à jour. Sous AIX, HP-UX et Solaris, un nom de fichier relatif est un nom de fichier ne commençant pas par une barre oblique. Sous OS/2 et Windows, il s'agit d'un nom de fichier ne commençant pas par une lettre d'unité suivie de deux points et d'une barre oblique inversée.

Si vous indiquez un nom de fichier relatif, les extensions utilisent les spécifications de répertoire dans plusieurs variables d'environnement client et serveur pour identifier le nom de fichier. Un nom de chemin absolu est constitué d'une première partie, qui est généralement associée aux points de montage, suivie d'un chemin d'accès définissant de manière unique le fichier requis. Le chemin d'accès indiqué à la fin du nom est spécifié dans des fonctions UDF. Les variables d'environnement contiennent une liste des chemins d'accès placés en tête du nom de chemin absolu et permettant d'identifier les noms de fichiers relatifs. Pour plus d'informations sur les variables d'environnement utilisées par DB2 Extensions pour l'identification des noms de fichier, reportez-vous à l'Annexe A, Définition des variables d'environnement de DB2 Extensions.

Les Extensions permettent également de convertir les noms de fichier dans le format approprié. Lorsqu'un nom de fichier est transféré sur le serveur, il est converti au format correspondant au système d'exploitation du serveur. Par exemple, le fichier OS/2 c:\dir1\abc.bmp devient /dir1/abc.bmp lorsqu'il est transféré sur un serveur AIX.


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]