41.4. Expresiones #

Todas las expresiones utilizadas en las instrucciones de PL/pgSQL se procesan utilizando el ejecutor principal de SQL del servidor. Por ejemplo, cuando escribes una instrucción de PL/pgSQL como

IF expresión THEN ...

PL/pgSQL evaluará la expresión enviando una consulta como

SELECT expresión

al motor SQL principal. Al formar el comando SELECT, cualquier aparición de nombres de variables de PL/pgSQL se reemplaza por parámetros de consulta, como se analiza en detalle en la Section 41.11.1. Esto permite que el plan de consulta para el SELECT se prepare una sola vez y luego se reutilice para evaluaciones posteriores con diferentes valores de las variables. Por lo tanto, lo que realmente sucede en el primer uso de una expresión es esencialmente un comando PREPARE. Por ejemplo, si hemos declarado dos variables enteras x e y, y escribimos

IF x < y THEN ...

lo que sucede entre bastidores es equivalente a

PREPARE nombre_declaración(integer, integer) AS SELECT $1 < $2;

y luego esta declaración preparada se ejecuta (EXECUTE) para cada ejecución de la instrucción IF, con los valores actuales de las variables de PL/pgSQL suministrados como valores de parámetros. Normalmente, estos detalles no son importantes para un usuario de PL/pgSQL, pero es útil conocerlos cuando se intenta diagnosticar un problema. Aparece más información en la Section 41.11.2.

Dado que una expresión se convierte en un comando SELECT, puede contener las mismas cláusulas que un SELECT ordinario, excepto que no puede incluir una cláusula de nivel superior UNION, INTERSECT o EXCEPT. Así, por ejemplo, se podría comprobar si una tabla no está vacía con:

IF count(*) > 0 FROM mi_tabla THEN ...

ya que la expresión entre IF y THEN se analiza como si fuera SELECT count(*) > 0 FROM mi_tabla. El SELECT debe producir una sola columna y no más de una fila. (Si no produce filas, el resultado se toma como NULL).