PL/pgSQL语句中用到的所有表达式会被服务器的主SQL执行器处理。例如,当你写一个这样的PL/pgSQL语句时
IF expression
THEN ...
PL/pgSQL将通过给主 SQL 引擎发送一个查询
SELECT expression
来计算该表达式。如Section 43.11.1中所详细讨论的,在构造该SELECT
命令时,PL/pgSQL变量名的每一次出现会被查询参数所替换。这允许SELECT
的查询计划仅被准备一次并且被重用于之后的对于该变量不同值的计算。因此,在一个表达式第一次被使用时实际发生的本质上是一个PREPARE
命令。例如,如果我们已经声明了两个整数变量x
和y
,并且我们写了
IF x < y THEN ...
在现象之后发生的等效于
PREPARE statement_name
(integer, integer) AS SELECT $1 < $2;
并且然后为每一次IF
语句的执行,这个预备语句都会被EXECUTE
,执行时使用变量的当前值作为参数值。通常这些细节对于一个PL/pgSQL用户并不重要,但是在尝试诊断一个问题时了解它们很有用。更多信息可见Section 43.11.2。