Tableaux de structure

Vous pouvez utiliser des tableaux de structure pour les instructions FETCH INTO, INSERT, UPDATE et DELETE qui ne sont pas dynamiques, lorsque vous définissez l'option de précompilation COMPATIBILITY_MODE sur ORA.

Vous pouvez utiliser des tableaux de structure pour stocker plusieurs données de colonne dans un formulaire de structure.

Pour un tableau de structure déclaré pour une instruction INSERT, UPDATE ou DELETE, vous devez vous assurer que tous les éléments de tableau sont initialisés avec une valeur. Sinon, des données inattendues peuvent être introduites ou supprimées de la table.

Le nombre total de lignes traitées avec succès est stocké dans la zone sqlca.sqlerrd[3] . Toutefois, la zone sqlca.sqlerrd[3] ne représente pas le nombre de lignes qui ont été validées avec succès dans le cas d'opérations INSERT, UPDATE ou DELETE.

Le nombre total de lignes impactées par l'opération INSERT, UPDATE ou DELETE est stocké dans la zone sqlca.sqlerrd[2] .

Dans une instruction FETCH INTO, le nombre maximal d'enregistrements pouvant être extraits est la cardinalité du tableau déclaré. Si d'autres lignes sont disponibles après la première extraction, vous pouvez répéter l'instruction FETCH INTO pour obtenir l'ensemble de lignes suivant.

Un tableau de structure peut être utilisé pour stocker des données de plusieurs colonnes dans un format de structure lors de l'exécution d'une instruction FETCH INTO. Dans l'exemple suivant, un tableau de structure est utilisé pour une instruction FETCH INTO:
// Declare structure array with cardinality of 3.
EXEC SQL BEGIN DECLARE SECTION;
	struct MyStruct
	{
		int c1;
		char c2[11];
	} MyStructVar[3];
EXEC SQL DECLARE cur CURSOR FOR
	SELECT empno, lastname FROM employee;
EXEC SQL END DECLARE SECTION;
...
// MyStrutVar is a structure array for host variables
EXEC SQL FETCH cur INTO :MyStructVar;
Vous pouvez utiliser un tableau de structure pour stocker plusieurs lignes pour une instruction INSERT. Dans l'exemple suivant, un tableau de structure est utilisé pour une instruction INSERT:
// Declare structure array with cardinality of 3.
EXEC SQL BEGIN DECLARE SECTION;
   typedef struct _st_type {
       int   id;
       char  name[21];
   } st_type;

   st_type st[3];
EXEC SQL END DECLARE SECTION;

...
// Populating the array.
for( i=0; i<3; i++) 
{
      memset( &st[i], 0x00, sizeof(st_type));
      if( i==0) { st[i].id = 100; strcpy(st[i].name, "hello1");}
      if( i==1) { st[i].id = 101; strcpy(st[i].name, "hello2");}
      if( i==2) { st[i].id = 102; strcpy(st[i].name, "hello3");}
}
// The structure elements must be in 
// the same order as that of the table elements.
//
EXEC SQL INSERT INTO tbl values (:st);

// Check for SQLCODE.
printf(“sqlca.sqlcode = %d\n”, sqlca.sqlcode ); // 0
// The INSERT operation inserted 3 rows without encounting an error
printf(“sqlca.sqlerrd[3] = %d\n”, sqlca.sqlerrd[3] ); // 3

// The INSERT operation was successful and 3 rows has been stored in database.
printf(“sqlca.sqlerrd[2] = %d\n”, sqlca.sqlerrd[2] ); // 3

// The tb11 table now contains the following rows:
// C1          C2
// ----------- -----------
//         100 hello1
//         101 hello2
//         102 hello3

Restrictions liées à la prise en charge des tableaux de structure

L'utilisation du tableau de structure dans les applications SQL imbriqué est soumise aux restrictions suivantes:
  • Les tableaux de structure sont pris en charge par les applications SQL imbriquées C ou C + + qui se connectent aux serveurs Db2® .
  • Les tableaux de structure doivent être déclarés dans DECLARE SECTION avec la taille exacte des éléments de tableau (cardinalité).
  • Un élément de tableau spécifique ne peut pas être spécifié dans une instruction SQL.
  • L'opération INSERT, UPDATE ou DELETE avec des tableaux de structure est exécutée en tant qu'opération atomique sur le serveur de base de données. Si un élément de tableau provoque une erreur SQL_ERROR, la transaction en cours est annulée.
  • L'utilisation de tableaux de structure n'est pas prise en charge par les instructions INSERT, UPDATE ou DELETE préparées dynamiquement.
  • Lorsque le tableau de structure est spécifié, un seul tableau de structure peut être déclaré dans une application SQL imbriquée.
  • Vous ne pouvez pas créer un tableau de structure dans un autre tableau de structure (par exemple, des tableaux de structure imbriqués).
  • La taille maximale de l'élément de tableau (cardinalité) est 32672.
  • Les types de données C et C++ suivants ne sont pas pris en charge pour une utilisation avec des tableaux de structure:
    • BLOB
    • Référence de fichier BLOB
    • Variable de releveur de coordonnées BLOB
    • CLOB
    • Référence de fichier CLOB
    • Variable de releveur de coordonnées CLOB
    • Type de données défini par l'utilisateur
    • langage XML