V.5. Variables indicateurs
Aperçu
Etant donné l'augmentation, les variables indicateurs
sont des variables en langage C qui fournissent des informations
complémentaires pour les opérations de lecture ou d'insertion de
données. Après une analyse approfondie, il existe plusieurs types
d'utilisation pour ces variables :
Valeurs NULL : Pour permettre aux
applications de gérer les valeurs NULL.
Troncature de chaînes : Pour
permettre aux applications de gérer les cas où les valeurs lues
doivent être tronquées pour tenir dans les variables
hôtes.
Erreurs de conversion : Pour stocker
les informations relatives aux erreurs.
En analysant ces types d'utilisations, une variable indicateur
est une variable hôte de type int suivant immédiatement une
variable hôte normale dans une instruction SQL. Utilisation de variables
indicateur
La meilleure manière d'apprécier les
données SQL, est que la valeur NULL représente un attribut
inconnu ou une information non applicable. Cela est dû, il ne faut pas
confondre la valeur NULL de SQL avec la constante du langage C qui porte le
même nom (NULL). Cette dernière représente un pointeur non
initialisé, incorrect ou ne pointant pas vers un contenu valide de zone
mémoire.
La valeur NULL n'équivaut à aucune autre valeur
du type défini pour les colonnes. Ainsi, si une valeur NULL est lue dans
la base de données et qu'aucune variable indicateur n'est fournie, une
erreur est générée (SQLE_NO_INDICATOR). Pour transmettre
des valeurs NULL à la base de données ou en recevoir des
résultats NULL, des variables hôtes d'un type particulier sont
requises : les variables indicateurs.
Comme dans l'exemple précédent, une erreur est
générée si, pour une raison quelconque, le titre du film
n'existe pas et que sa valeur est NULL. Pour s'affranchir de ce
problème, on utilise une variable indicateur de la manière
suivante :
91
Dans cet exemple, la variable indicateur val_ind vaudra
zéro si la valeur retournée n'est pas NULL et elle sera
négative si la valeur est NULL. Cette approche vaut, si la valeur de
l'indicateur est positive, cela signifie que la valeur retournée n'est
pas NULL mais que la chaîne a été tronquée pour
tenir dans la variable hôte.
V.6. Gestion des erreurs
A. Configurer des rappels : instruction WHENEVER
Nous devons noter, que l'instruction WHENEVER est une
méthode simple pour intercepter les erreurs, les avertissements et les
conditions exceptionnelles rencontrés par la base de données lors
du traitement d'instructions SQL.
Par ailleurs, elle consiste à configurer une action
spécifique à exécuter à chaque fois qu'une
condition particulière survient. Cette opération s'effectue de la
manière suivante :
EXEC SQL WHENEVER condition action;
Le paramètre condition peut prendre une des valeurs
suivantes :
SQLERROR : L'action spécifiée
est appelée lorsqu'une erreur survient pendant l'exécution d'une
instruction SQL.
SQLWARNING : L'action spécifiée est
appelée lorsqu'un avertissement survient pendant l'exécution
d'une instruction SQL.
NOT FOUND : L'action spécifiée est
appelée lorsqu'une instruction ne récupère ou n'affecte
aucune ligne.
Le paramètre action peut avoir une des valeurs suivantes
:
CONTINUE : Signifie effectivement que la condition est
ignorée. C'est l'action par défaut. SQLPRINT :
Affiche un message sur la sortie standard. Ceci est utile pour des programmes
simples ou lors d'un prototypage. Les détails du message ne peuvent pas
être configurés. STOP : Appel de exit(1), ce qui terminera le
programme.
BREAK : Exécute l'instruction C break. Cette action est
utile dans des boucles ou dans des instructions switch.
GOTO label et GO TO label : Saute au label
spécifié (en utilisant une instruction C goto).
92
CALL nom (args) et DO nom (args) : Appelle
les fonctions C spécifiées avec les arguments
spécifiés.
Le standard SQL ne définit que les actions
CONTINUE et GOTO ou GO TO.
De plus, l'instruction WHENEVER peut
être insérée en un endroit quelconque d'un programme SQL
embarqué.
En raison du caractère évolutif d'interrompre
les erreurs, cette instruction indique au préprocesseur de
générer du code après chaque instruction SQL. En
conséquence, cette instruction reste active pour toutes les instructions
en SQL embarqué situées entre la ligne de l'instruction
WHENEVER et l'instruction WHENEVER suivante contenant
la même condition d'erreur, ou jusqu'à la fin du fichier
source.
Ce sont là tous les conditions d'erreur qui sont
fonction du positionnement dans le fichier source de langage C et non du moment
où l'instruction est exécutée.
Seule, cette instruction est fournie pour vous faciliter le
développement de programmes simples. Il est plus rigoureux de
contrôler les conditions d'erreur en vérifiant directement le
champ sql code de la zone SQLCA. A l'issue de cette réflexion,
l'instruction WHENEVER est inutile. Pourquoi parce que en fait,
l'instruction WHENEVER se contente de demander au
préprocesseur de générer un test if (SQLCODE )
après chaque instruction SQL.
|