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