GET DESCRIPTOR — récupère des informations d'une zone de descripteur SQL
GET DESCRIPTOR nom_descripteur :cvariable = element_entete_descripteur [, ... ] GET DESCRIPTOR nom_descripteur VALUE numero_colonne :cvariable = element_descripteur [, ... ]
GET DESCRIPTOR récupère des informations à propos du résultat d'une requête à partir d'une zone de descripteur SQL et les stocke dans des variables hôtes. Une zone de descripteur est d'ordinaire remplie en utilisant FETCH ou SELECT avant d'utiliser cette commande pour transférer l'information dans des variables du langage hôte.
Cette commande a deux formes: la première forme récupère les objets de « l'entête » du descripteur, qui s'appliquent au jeu de résultat dans son ensemble. Un exemple est le nombre d'enregistrements. La seconde forme, qui nécessite le nombre de colonnes comme paramètre additionnel, récupère des informations sur une colonne particulière. Par exemple, le type de la colonne, et la valeur réelle de la colonne.
Un nom de descripteur.
Un marqueur identifiant de quel objet de l'entête récupérer l'information. Seul COUNT, qui donne le nombre de colonnes dans le résultat, est actuellement supporté.
Le numéro de la colonne à propos duquel on veut récupérer des informations. Le compte commence à 1.
Un marqueur identifiant quel élément d'information récupérer d'une colonne. Voyez Section 35.7.1, « Zones de Descripteur SQL nommées » pour une liste d'objets supportés.
Une variable hôte qui recevra les données récupérées de la zone de descripteur.
Un exemple de récupération du nombre de colonnes dans un résultat:
EXEC SQL GET DESCRIPTOR d :d_count = COUNT;
Un exemple de récupération de la longueur des données de la première colonne:
EXEC SQL GET DESCRIPTOR d VALUE 1 :d_returned_octet_length = RETURNED_OCTET_LENGTH;
Un exemple de récupération des données de la seconde colonne en tant que chaîne:
EXEC SQL GET DESCRIPTOR d VALUE 2 :d_data = DATA;
Voici un exemple pour la procédure complète, lors de l'exécution de SELECT current_database(); et montrant le nombre de colonnes, la longueur de la colonne, et la données de la colonne:
int main(void) { EXEC SQL BEGIN DECLARE SECTION; int d_count; char d_data[1024]; int d_returned_octet_length; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO testdb AS con1 USER testuser; EXEC SQL ALLOCATE DESCRIPTOR d; /* Déclarer un curseur, l'ouvrir, et assigner un descripteur au curseur */ EXEC SQL DECLARE cur CURSOR FOR SELECT current_database(); EXEC SQL OPEN cur; EXEC SQL FETCH NEXT FROM cur INTO SQL DESCRIPTOR d; /* Récupérer le nombre total de colonnes */ EXEC SQL GET DESCRIPTOR d :d_count = COUNT; printf("d_count = %d\n", d_count); /* Récupérer la longueur d'une colonne retournée */ EXEC SQL GET DESCRIPTOR d VALUE 1 :d_returned_octet_length = RETURNED_OCTET_LENGTH; printf("d_returned_octet_length = %d\n", d_returned_octet_length); /* Récupérer la conlonne retournée en tant que chaîne */ EXEC SQL GET DESCRIPTOR d VALUE 1 :d_data = DATA; printf("d_data = %s\n", d_data); /* Fermer */ EXEC SQL CLOSE cur; EXEC SQL COMMIT; EXEC SQL DEALLOCATE DESCRIPTOR d; EXEC SQL DISCONNECT ALL; return 0; }
Quand l'exemple est exécuté, son résultat ressemble à ceci:
d_count = 1 d_returned_octet_length = 6 d_data = testdb