Анонимный блок в SQL — 25.03.26 10:00
Мы обычно пишем запросы: SELECT, INSERT, UPDATE…
Это отдельные команды, и каждая выполняется сама по себе. Но иногда нам хочется написать целую мини-программу, которая делает несколько действий сразу: например, берёт данные из одной таблицы, считает что-то, обновляет другую таблицу и выводит результат.
И при этом нам не нужно, чтобы эта программа сохранялась в базе как функция или процедура — мы просто хотим один раз выполнить код.
Вот для этого и нужен анонимный блок.

А в моем канале Аналитика FM выпуски про расчет Cohort Retention в разных бизнесах.
Канал я веду с нуля подписчиков, рассказываю про аналитику и разбираю различные кейсы на реальных примерах.
Подписывайся, если интересно как устроен мир аналитика!
Анонимный блок — это кусок кода, который:
-
Объединяет несколько SQL-команд в одну «программу».
-
Может содержать переменные, условия (IF), циклы (LOOP) и логику, как в обычной программе.
-
Не сохраняется в базе — после выполнения он исчезает. Его никто не будет видеть в списке функций или процедур.
То есть это как написать одноразовый скрипт: ты его запускаешь, видишь результат — и больше он никуда не сохраняется.
Пример в Oracle PL/SQL
BEGIN
— объявляем переменную
DECLARE
v_count NUMBER;
BEGIN
— считаем количество записей в таблице users
SELECT COUNT(*) INTO v_count FROM users;
— выводим результат
DBMS_OUTPUT.PUT_LINE(‘Всего пользователей: ‘ || v_count);
END;
END;
/
Что здесь происходит:
-
BEGIN … END; — тело блока, где выполняется логика.
-
DECLARE — можно объявлять переменные.
-
SQL-команда SELECT … INTO считает количество пользователей и кладёт в переменную.
-
DBMS_OUTPUT.PUT_LINE выводит текст на экран.
-
/ — говорит Oracle, что блок закончился и его нужно выполнить.
После выполнения блока: переменные исчезают, код никуда не сохраняется, всё «одноразовое».
Пример в PostgreSQL
В PostgreSQL нет точно такого же синтаксиса, но есть DO-блок:
DO $$
DECLARE
v_count INT;
BEGIN
SELECT COUNT(*) INTO v_count FROM users;
RAISE NOTICE ‘Всего пользователей: %’, v_count;
END
$$;
-
DO $$ … $$; — обёртка для анонимного блока. Мы говорим базе, что сейчас идет блок кода, который нужно выполнить целиком как отдельную программу.
-
Объявляем переменную v_count. Она нам нужна, чтобы сохранить результат вычислений и использовать его дальше внутри блока.
-
Все, что внутри BEGIN … END, выполняется пошагово как мини-программа. Считаем количество строк в таблице users и записываем это значение в объявленную переменную
-
RAISE NOTICE выводит сообщение. % заменяется на значение переменной v_count.
Зачем это нужно
-
Разовая операция. Хочешь разово обновить данные или проверить что-то — не нужно создавать отдельную функцию.
-
Тестирование логики. Пробуешь алгоритм, проверяешь, как работает SQL вместе с переменными и условиями.
-
Быстрое прототипирование. Хочешь понять, как соединить несколько шагов в одну последовательность действий.
Анонимный блок — это как одноразовый скрипт в SQL, который можно писать прямо в базе. Он может быть сложным, с переменными и логикой, но после выполнения исчезает.
Для аналитика это полезно, если нужно быстро посчитать что-то, проверить гипотезу или сделать массовую корректировку данных, не создавая постоянную функцию или процедуру.
В канале Аналитика FM разбираем реальные продуктовые метрики и их реализацию на SQL. Погружаемся в мира аналитики и аналитического мышления.
Если у тебя тоже есть интерес к аналитике,
Подписывайся!
