31.12. Directives du préprocesseur

31.12.1. Inclure des fichiers

Pour inclure un fichier externe dans un programme SQL embarqué, il suffit d'utiliser :

EXEC SQL INCLUDE nomfichier;

Le préprocesseur du SQL embarqué cherchera un fichier nommé nomfichier.h, le traitera et l'inclura dans la sortie C résultante. Du coup, les instructions C embarquées du fichier inclus sont gérées correctement.

Il est à noter que ceci n'est pas la même chose que

#include <nomfichier.h>

parce que ce fichier ne sera 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.

[Note]

Note

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.

31.12.2. Directives #define et #undef

Le SQL embarqué à un concept similaire à la directive #define qui est connu des développeurs C :

EXEC SQL DEFINE nom;
EXEC SQL DEFINE nom valeur;

Donc, vous pouvez définir un nom :

EXEC SQL DEFINE HAVE_FEATURE;

Et vous pouvez aussi définir des constantes :

EXEC SQL DEFINE MON_NOMBRE 12;
EXEC SQL DEFINE MA_CHAINE 'abc';

Utilisez undef pour supprimer une définition précédente :

EXEC SQL UNDEF MON_NOMBRE;

Bien sûr, vous pouvez continuer à utiliser les versions C de #define et #undef dans votre programme qui embarque du SQL. La différence réside dans le point que vos valeurs définies seront évaluées. Si vous utilisez EXEC SQL DEFINE alors le préprocessus ecpg évaluera les définitions et y substituera les valeurs. Par exemple, si vous écrivez :

EXEC SQL DEFINE MON_NOMBRE 12;
...
EXEC SQL UPDATE Tbl SET col = MON_NOMBRE;

alors ecpg fera déjà la substitution et votre compilateur C ne verra aucun nom ou identifiant MON_NOMBRE. Notez que vous ne pouvez pas utiliser #define pour une constante que vous allez utiliser dans une requête SQL embarquée car, dans ce cas, le précompilateur ecpg n'est pas capable de voir cette déclaration.

31.12.3. Directives ifdef, ifndef, else, elif et endif

Vous pouvez utiliser les directives suivantes pour compiler des sections de code de façon conditionnelle :

EXEC SQL ifdef nom;

Vérifie un nom et traite les lignes suivantes 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;

Commence le traitement d'une section alternative à une section introduite avec soit EXEC SQL ifdef nom ou EXEC SQL ifndef nom.

EXEC SQL elif nom;

Vérifie nom et commence le traitement d'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;