GET DESCRIPTOR — récupère des informations d'une zone de descripteur SQL
GET DESCRIPTORnom_descripteur
:cvariable
=element_entete_descripteur
[, ... ] GET DESCRIPTORnom_descripteur
VALUEnumero_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.
nom_descripteur
#Un nom de descripteur.
element_entete_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é.
numero_colonne
#Le numéro de la colonne à propos duquel on veut récupérer des informations. Le compte commence à 1.
element_descripteur
#Un marqueur identifiant quel élément d'information récupérer d'une colonne. Voir Section 34.7.1 pour une liste d'objets supportés.
cvariable
#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 colonne 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
GET DESCRIPTOR
est spécifié dans le standard SQL.