C. Types des variables hôtes
De leur côté, seul un nombre limité de
types de données du langage C est supporté pour les variables
hôtes. Aussi, certains types de variable hôte n'ont pas de type
correspondant en langage C. Dans ce sens, des macros prédéfinies
peuvent être utilisées pour déclarer les variables
hôtes. Comme, le type prédéfini VARCHAR est la structure
adéquate pour interfacer des données SQL de type varchar. Avec
une déclaration comme
VARCHAR var[31];
Est en fait convertie par le préprocesseur en une
structure :
struct varchar_var { int len; char arr[180]; } var;
D. Utilisation d'une variable hôte : clause INTO
En ce qui concerne le cas d'une requête de ligne unique,
c'est à dire qui n'extrait pas plus d'une ligne de la base de
données, les valeurs renvoyées peuvent être stockées
directement dans des variables hôtes. Cependant, contrairement au langage
C ou C++, le SQL est un langage ensembliste : une requête peut
très bien retourner plus d'une ligne. Dans ce cas, il faut faire appel
à la notion de curseur.
Il en est également pour le cas d'une requête de
ligne unique, une nouvelle clause INTO est intercalée entre la clause
SELECT et la clause FROM. La clause INTO contient une liste de
variables hôtes destinée à recevoir la valeur de chacune
des colonnes mentionnées dans la clause SELECT. Le
nombre de variables hôtes doit être identique au nombre de colonnes
de la clause SELECT. A la suite, les variables hôtes
peuvent être accompagnées de variables indicateur afin de prendre
en compte les résultats NULL.
C'est peut être, d'ailleurs, le même lors de
l'exécution de l'instruction SELECT, le serveur de base de
données récupère les résultats et les place dans
les variables hôtes. A chaque palier, si le résultat de la
requête contient plusieurs lignes, le serveur renvoie une erreur. De
plus, si la requête n'aboutit pas à la sélection d'une
ligne, un avertissement est renvoyé.
Ainsi, les erreurs et les avertissements sont renvoyés
dans la structure SQLCA.
Il a par exemple, en reprenant la base de données de la
séance de travaux pratiques précédentes et une
requête que nous avons déjà rencontrée: «
nombre de fois que chacun des films a été projeté ».
Mis en avant, nous pouvons récupérer les résultats de
cette requête de ligne unique dans des variables hôtes de la
manière suivante :
90
|