39.4. 表达式

所有在PL/pgSQL语句里使用的表达式都是用服务器的普通SQL执行器进行处理的。 例如,当要写一个如下的PL/pgSQL声明时

IF expression THEN ...

PL/pgSQL 会通过在SQL引擎中输入类似下面的查询来计算表达式

SELECT expression

一旦形成SELECT命令,任何出现的PL/pgSQL变量名会由参数取代,正如在Section 39.10.1讨论的那样。 因此,只需要定义一次SELECT查询计划,之后可以重复使用。也就是说,第一次使用表达式时,本质上是生效的是PREPARE命令。 例如,我们声明两个整型变量xy

IF x < y THEN ...

后台实际执行的是:

PREPARE statement_name(integer, integer) AS SELECT $1 < $2;

并且,一条EXECUTE说明语句会处于预备状态,以后每一次执行IF语句时都会调用该说明语句, 将当前PL/pgSQL变量的值提供为参数值。 以该种方式准备的查询计划被保存为数据库连接的生命,正如在Section 39.10.2描述的那样。 通常情况下,对于PL/pgSQL用户来说,这样做并不是特别重要,不过,当在进行错误诊断时,如果知道这一点的话会很有用。