Plusieurs directives de préprocesseur sont disponibles, qui modifient
comment le préprocesseur ecpg
analyse et traite
un fichier.
Pour inclure un fichier externe dans votre fichier SQL embarqué, utilisez:
EXEC SQL INCLUDEfilename
; EXEC SQL INCLUDE <filename
>; EXEC SQL INCLUDE "filename
";
Le préprocesseur de SQL embarqué recherchera un fichier appelé
,
le préprocessera, et l'incluera dans la sortie C résultante. En
conséquence de quoi, les ordres SQL embarqués dans le fichier inclus
seront traités correctement.
filename
.h
Le préprocesseurs ecpg
cherchera un fichier dans
plusieurs répertoires dans l'ordre suivant:
/usr/local/include
/usr/local/pgsql/include
)/usr/include
Mais quand EXEC SQL INCLUDE
"
est utilisé, seul
le répertoire courant est parcouru.
filename
"
Dans chaque répertoire, le préprocesseur recherchera d'abord le nom
de fichier tel que spécifié, et si non trouvé, rajoutera .h
au nom de fichier et essaiera à nouveau (sauf si le nom de fichier spécifié
a déjà ce suffixe).
Notez que EXEC SQL INCLUDE
est différent de:
#include <filename
.h>
parce que ce fichier ne serait pas soumis au préprocessing des commandes SQL.
Naturellement, vous pouvez continuer d'utiliser la directive C
#include
pour inclure d'autres fichiers d'entête.
files.
Le nom du fichier à inclure est sensible à la casse, même si le
reste de la commande EXEC SQL INCLUDE
suit les
règles normales de sensibilité à la casse de SQL.
Similaires aux directives #define
qui sont connues en C,
le SQL embarqué a un concept similaire:
EXEC SQL DEFINEname
; EXEC SQL DEFINEname
value
;
Vous pouvez donc définir un nom:
EXEC SQL DEFINE HAVE_FEATURE;
Et vous pouvez aussi définir des constantes:
EXEC SQL DEFINE MYNUMBER 12; EXEC SQL DEFINE MYSTRING 'abc';
Utilisez undef
pour supprimer une définition précédente:
EXEC SQL UNDEF MYNUMBER;
Bien sûr, vous pouvez continuer d'utiliser les versions C de #define
et #undef
dans votre programme SQL embarqué. La différence
est le moment où vos valeurs définies sont évalues. Si vous utilisez
EXEC SQL DEFINE
alors la préprocesseur ecpg
évalue les définition et substitiue les valeurs. Par exemple si vous écrivez:
EXEC SQL DEFINE MYNUMBER 12; ... EXEC SQL UPDATE Tbl SET col = MYNUMBER;
alors ecpg
fera d'emblée la substitution et votre compilateur C ne
verra jamais aucun nom ou identifiant MYNUMBER
. Notez que vous ne
pouvez pas utiliser #define
pour une constante que vous allez utiliser
dans une requête SQL embarquée parce que dans ce cas le précomipilateur SQL embarqué
n'est pas capable de voir cette déclaration.
Vous pouvez utiliser les directives suivantes pour compiler des sections de code sous condition:
EXEC SQL ifdef nom
;
Vérifie un nom
et traite les lignes suivante si
nom
a été créé avec EXEC SQL define
.
nom
EXEC SQL ifndef nom
;
Vérifie un nom
et traite les lignes suivantes si
nom
n'a pas été créé avec
EXEC SQL define
.
nom
EXEC SQL else;
Traite une section alternative d'une section introduite par soit
EXEC SQL ifdef
soit
nom
EXEC SQL ifndef
.
nom
EXEC SQL elif nom
;
Vérifie nom
et démarre une section alternative si
nom
a été créé avec EXEC SQL define
.
nom
EXEC SQL endif;
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;