38.4. Expressions
Toutes les expressions utilisées dans les instructions
PL/pgSQL sont traitées par
l'exécuteur SQL classique du
serveur. En effet, une requête comme
SELECT expression
est traité par le moteur SQL principal. Bien qu'utilisant la
commande SELECT,
tout nom de variable PL/pgSQL
est remplacé par des paramètres (ceci est expliqué en détail
dans la Section 38.10.1,
« Substitution de variables »). Cela permet au
plan de requête du SELECT d'être préparé une
seule fois, puis d'être réutilisé pour les évaluations
suivantes avec différentes valeurs des variables. Du coup, ce
qui arrive réellement à la première utilisation d'une
expression est simplement une commande PREPARE. Par exemple, si nous
déclarons deux variables de type integer, x et y, et que nous
écrivons :
IF x < y THEN ...
ce qui se passe en arrière plan est ceci :
PREPARE nom_instruction(integer, integer) AS SELECT $1 < $2;
puis cette instruction préparée est exécutée (via EXECUTE) pour chaque
exécution de l'instruction IF, avec les valeurs
actuelles des variables PL/pgSQL fournies en tant que valeurs des
paramètres. Le plan de requête préparé de cette façon est
sauvegardé pour toute la durée de la connexion à la base, comme
le décrit la Section 38.10.2,
« Mise en cache du plan ». Généralement, ces
détails ne sont pas importants pour un utilisateur de
PL/pgSQL, mais ils sont utiles
à connaître pour diagnostiquer un problème.