PostgreSQLLa base de données la plus sophistiquée au monde.

31.12. Directives du préprocesseur

31.12.1. Inclusion de 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é 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.

[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 du SQL.

31.12.2. Directives #define et #undef

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.

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

Les directives suivantes peuvent être utilisées pour compiler des sections de code de façon conditionnelle :

EXEC SQL ifdef nom;

vérifie un nom et traite les lignes qui suivent si nom a été créé avec EXEC SQL define nom ;

EXEC SQL ifndef nom;

vérifie un nom et traite les lignes qui suivent 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 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;