3

Анонимный блок в SQL

Серия Аналитика FM

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

Вот для этого и нужен анонимный блок.

Анонимный блок в SQL

А в моем канале Аналитика FM выпуски про расчет Cohort Retention в разных бизнесах.

Канал я веду с нуля подписчиков, рассказываю про аналитику и разбираю различные кейсы на реальных примерах.

Подписывайся, если интересно как устроен мир аналитика!

Анонимный блок - это кусок кода, который:

  1. Объединяет несколько SQL-команд в одну "программу".

  2. Может содержать переменные, условия (IF), циклы (LOOP) и логику, как в обычной программе.

  3. Не сохраняется в базе - после выполнения он исчезает. Его никто не будет видеть в списке функций или процедур.

То есть это как написать одноразовый скрипт: ты его запускаешь, видишь результат - и больше он никуда не сохраняется.

Пример в 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.

Зачем это нужно

  1. Разовая операция. Хочешь разово обновить данные или проверить что-то - не нужно создавать отдельную функцию.

  2. Тестирование логики. Пробуешь алгоритм, проверяешь, как работает SQL вместе с переменными и условиями.

  3. Быстрое прототипирование. Хочешь понять, как соединить несколько шагов в одну последовательность действий.

Анонимный блок - это как одноразовый скрипт в SQL, который можно писать прямо в базе. Он может быть сложным, с переменными и логикой, но после выполнения исчезает.

Для аналитика это полезно, если нужно быстро посчитать что-то, проверить гипотезу или сделать массовую корректировку данных, не создавая постоянную функцию или процедуру.

В канале Аналитика FM разбираем реальные продуктовые метрики и их реализацию на SQL. Погружаемся в мира аналитики и аналитического мышления.

Если у тебя тоже есть интерес к аналитике,

Подписывайся!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества