Найти в Дзене
Oracle Developer

Чем анонимный блок отличается от процедуры и функции

? Коллеги, всем привет! С вами Денис 🤝 Пока оставим на немного Оптимизацию, и вспомним старый добрый PL/SQL 😊 Сегодняшний материал будет полезен джунам. Итак, многие начинающие разработчики путают анонимные блоки с хранимыми процедурами и функциями. Разберёмся в ключевых различиях и поймём, когда что применять. Основные отличия Анонимный блок - это PL/SQL-код, который выполняется один раз и не сохраняется в базе данных. Процедуры и функции - это именованные объекты, которые компилируются и хранятся для многократного использования. 🔹 Анонимный блок выполняется сразу и исчезает после завершения. Его нельзя вызвать повторно без повторной отправки всего кода. 🔹 Процедура сохраняется в БД, компилируется один раз и может вызываться многократно по имени. Не возвращает значение через RETURN, но может использовать OUT-параметры. 🔹 Функция также сохраняется в БД, но обязательно возвращает значение через RETURN и может использоваться в SQL-запросах. Практические примеры Анонимный бло

Чем анонимный блок отличается от процедуры и функции?

Коллеги, всем привет!

С вами Денис 🤝

Пока оставим на немного Оптимизацию, и вспомним старый добрый PL/SQL 😊

Сегодняшний материал будет полезен джунам.

Итак, многие начинающие разработчики путают анонимные блоки с хранимыми процедурами и функциями. Разберёмся в ключевых различиях и поймём, когда что применять.

Основные отличия

Анонимный блок - это PL/SQL-код, который выполняется один раз и не сохраняется в базе данных. Процедуры и функции - это именованные объекты, которые компилируются и хранятся для многократного использования.

🔹 Анонимный блок выполняется сразу и исчезает после завершения. Его нельзя вызвать повторно без повторной отправки всего кода.

🔹 Процедура сохраняется в БД, компилируется один раз и может вызываться многократно по имени. Не возвращает значение через RETURN, но может использовать OUT-параметры.

🔹 Функция также сохраняется в БД, но обязательно возвращает значение через RETURN и может использоваться в SQL-запросах.

Практические примеры

Анонимный блок для разового обновления данных:

DECLARE

v_count NUMBER;

BEGIN

UPDATE employees

SET salary = salary * 1.1

WHERE department_id = 50;

v_count := SQL%ROWCOUNT;

DBMS_OUTPUT.PUT_LINE('Обновлено строк: ' || v_count);

END;

/

Процедура для повторяющейся операции:

CREATE OR REPLACE PROCEDURE update_salary(

p_dept_id IN NUMBER,

p_percent IN NUMBER

) IS

v_count NUMBER;

BEGIN

UPDATE employees

SET salary = salary * (1 + p_percent / 100)

WHERE department_id = p_dept_id;

v_count := SQL%ROWCOUNT;

DBMS_OUTPUT.PUT_LINE('Обновлено: ' || v_count);

END;

/

Функция для использования в запросах:

CREATE OR REPLACE FUNCTION get_dept_avg_salary(

p_dept_id IN NUMBER

) RETURN NUMBER IS

v_avg_salary NUMBER;

BEGIN

SELECT AVG(salary)

INTO v_avg_salary

FROM employees

WHERE department_id = p_dept_id;

RETURN v_avg_salary;

END;

/

-- Использование в SELECT

SELECT department_name,

get_dept_avg_salary(department_id) as avg_salary

FROM departments;

Когда что использовать

⚠️ Анонимные блоки - для разовых задач: миграция данных, тестирование логики, административные скрипты. Их нельзя переиспользовать, и они не оптимизируются БД.

✅ Процедуры - для бизнес-логики, которая выполняется регулярно: обработка заказов, расчёт зарплат, пакетные операции. Компилируются один раз, выполняются быстро.

✅ Функции - когда нужно вернуть значение и использовать его в SQL-запросах: вычисления, преобразования данных, проверки условий.

Если подвести итог

Главное различие - в жизненном цикле и назначении. Анонимные блоки одноразовые и не сохраняются, процедуры и функции - постоянные объекты БД с оптимизированным выполнением. Выбирайте анонимные блоки для разовых задач, процедуры для повторяющейся логики без возврата значений, функции - когда результат нужен в SQL-запросах.

Не забываем, что в четверг в 19:00 у нас на канале будет выступать Игорь Мельников. Бронируйте время в своих календарях. Игорь фигни не расскажет🔥

Анонс будет завтра 🔔

Всем хорошей рабочей недели! 🚀

#oracle #plsql #процедуры #функции #базыданных #backend #разработка

Канал Oracle Developer | Чатик 💬

Мини-курс Оптимизация: Быстрый старт 🚀

📱 Facebook 📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱Threads

RUTUBE