Перейти к основному содержимому

Выражения

примечание

Эта страница переведена при помощи нейросети 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).