40.4. Выражения#
40.4. Выражения #
Все выражения, используемые в операторах PL/pgSQL, обрабатываются с помощью основного исполнителя SQL сервера. Например, когда вы пишете оператор PL/pgSQL вроде
IF expression
THEN ...
PL/pgSQL будет вычислять выражение, подавая запрос вида
SELECT expression
в основной SQL-движок. При формировании команды SELECT
все вхождения имен переменных PL/pgSQL заменяются на параметры запроса, как подробно обсуждается в разделе Раздел 40.11.1. Это позволяет подготовить план запроса для SELECT
только один раз и затем использовать его повторно для последующих вычислений с разными значениями переменных. Таким образом, на самом деле при первом использовании выражения происходит в основном команда PREPARE
. Например, если мы объявили две целочисленные переменные x
и y
, и мы пишем
IF x < y THEN ...
что происходит за кулисами эквивалентно
PREPARE statement_name
(integer, integer) AS SELECT $1 < $2;
и затем этот подготовленный оператор EXECUTE
выполняется для каждого
выполнения оператора IF
, с текущими значениями
переменных PL/pgSQL, предоставленных в качестве
значений параметров. Обычно эти детали не являются
важными для пользователя PL/pgSQL, но
они полезны при попытке диагностировать проблему.
Более подробная информация приведена в разделе Раздел 40.11.2.
Так как expression
преобразуется в команду SELECT
, оно может содержать те же самые предложения, что и обычный SELECT
, за исключением того, что оно не может включать верхнеуровневое предложение UNION
, INTERSECT
или EXCEPT
. Таким образом, например, можно проверить, является ли таблица непустой
IF count(*) > 0 FROM my_table THEN ...
поскольку expression
между IF
и THEN
разбирается так, как если бы оно было SELECT count(*) > 0 FROM my_table
.
SELECT
должен производить один столбец и не более одной строки. (Если он не производит строк, результат считается NULL).