3
Команды без результата
Команды SQL встраиваются в код PL/pgSQL
как и в выражениях:
запрос подготавливается,
переменные PL/pgSQL подставляются как параметры
SELECT → PERFORM
удобно для вызова функций с побочными эффектами
запросы, начинающиеся на WITH, надо «оборачивать» в SELECT
INSERT, UPDATE, DELETE и другие команды SQL
кроме служебных команд
управление транзакциями — только в процедурах и анонимных блоках
Как мы уже видели, PL/pgSQL очень тесно интегрирован с SQL.
В частности, все выражения вычисляются с помощью подготовленных
SQL-операторов. При этом в выражениях можно использовать
переменные PL/pgSQL и параметры подпрограмм — они
автоматически подставляются в запрос в виде параметров.
Внутри кода на PL/pgSQL можно выполнять и SQL-запросы. Чтобы
выполнить запрос, не возвращающий результат (INSERT, UPDATE,
DELETE, CREATE, DROP и т. п.), достаточно просто написать команду
SQL внутри кода на PL/pgSQL как отдельный оператор.
Команды подготавливаются точно так же, как и выражения. Это
позволяет закешировать разобранный (или спланированный) запрос и
не выполнять эту часть работы повторно. Внутри команд так же можно
использовать переменные PL/pgSQL, которые будут автоматически
заменены на параметры.
Таким же образом можно вызвать и обычный запрос SELECT, если его
результат не важен — для этого ключевое слово SELECT надо
заменить на PERFORM. Это имеет смысл, например, для вызова
функций с побочным эффектом. Если запрос начинается с WITH, его
необходимо «обернуть» в SELECT (чтобы в конечном итоге запрос
начинался на PERFORM).
Команды COMMIT и ROLLBACK допускаются только в процедурах и
в анонимных блоках кода (выполняемых SQL-командой DO).