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

Мы обычно пишем запросы: 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.
Погружаемся в мира аналитики и аналитического мышления.
Если у тебя тоже есть интерес к аналитике, Подписывайся!

#Python
#IT
#Программирование
#Автоматизация
#Аналитик
#Аналитика
#Метрики
#SQL
#MicrosoftExcel
#базаданных
#СистемныйАнализ
#СистемныйАналитик
#Самообразование
#КритическоеМышление
#Стартап
#Развитие
#Фриланс

Начать дискуссию