Documentation PostgreSQL 8.3.23 > Interfaces client > ECPG - SQL embarqué dans du C > Directives du préprocesseur | |
Gestion des erreurs | Traiter les programmes en SQL embarqué |
Pour inclure un fichier externe dans un programme SQL embarqué, il suffit d'utiliser :
EXEC SQL INCLUDE nomfichier;
Le préprocesseur du SQL embarqué cherche un fichier nommé nomfichier.h, le prétraite et l'inclut dans la sortie C résultante. De ce fait, les instructions C embarquées du fichier inclus sont correctement gérées.
Ce n'est pas la même chose que :
#include <nomfichier.h>
parce que ce fichier n'est alors pas sujet au prétraitement des commandes SQL. Naturellement, la directive C #include peut toujours être utilisée pour inclure d'autres fichiers d'en-tête.
Le nom du fichier inclus est sensible à la casse, même si le reste de la commande EXEC SQL INCLUDE suit les règles habituelles de sensibilité à la casse du SQL.
Le SQL embarqué utilise un concept similaire à la directive #define utilisée en C :
EXEC SQL DEFINE nom; EXEC SQL DEFINE nom valeur;
Un nom peut être défini :
EXEC SQL DEFINE HAVE_FEATURE;
Des constantes peuvent aussi être définies :
EXEC SQL DEFINE MON_NOMBRE 12; EXEC SQL DEFINE MA_CHAINE 'abc';
undef est utilisé pour supprimer une définition :
EXEC SQL UNDEF MON_NOMBRE;
Les versions C de #define et #undef peuvent, évidemment, continuer à être utilisées dans le programme qui embarque le SQL. La différence se situe à l'endroit où les valeurs définies sont évaluées. Si EXEC SQL DEFINE est utilisé, alors le préprocesseur ecpg évalue les définitions et effectue les substitutions. Par exemple, si on écrit :
EXEC SQL DEFINE MON_NOMBRE 12; ... EXEC SQL UPDATE Tbl SET col = MON_NOMBRE;
alors ecpg effectue la substitution et le compilateur C ne voit aucun nom ou identifiant MON_NOMBRE. #define ne peut pas être utilisé pour une constante utilisée dans une requête SQL embarquée car, dans ce cas, le précompilateur ecpg n'est pas capable de voir cette déclaration.
Les directives suivantes peuvent être utilisées pour compiler des sections de code de façon conditionnelle :
vérifie un nom et traite les lignes qui suivent si nom a été créé avec EXEC SQL define nom ;
vérifie un nom et traite les lignes qui suivent si nom n'a pas été créé avec EXEC SQL define nom ;
commence le traitement d'une section alternative à une section introduite avec EXEC SQL ifdef nom ou EXEC SQL ifndef nom ;
vérifie nom et commence le traitement d'une section alternative si nom a été créé avec EXEC SQL define nom ;
termine une section alternative.
Exemple :
exec sql ifndef TZVAR; exec sql SET TIMEZONE TO 'GMT'; exec sql elif TZNAME; exec sql SET TIMEZONE TO TZNAME; exec sql else; exec sql SET TIMEZONE TO TZVAR; exec sql endif;