BODY в Oracle SQL — как описывать пакеты, процедуры и функции

🟢 BODY в Oracle SQL. Введение

Ключевое слово BODY в Oracle SQL используется для описания реализации объектов PL/SQL, таких как:

  • Пакеты (PACKAGE BODY)

  • Процедуры

  • Функции

  • Триггеры

BODY отделяет объявление (интерфейс) от реализации (выполняемый код). Это важный принцип модульного программирования в Oracle.


🔤 Написание

sql
CREATE OR REPLACE PACKAGE BODY имя_пакета IS
-- реализация всех процедур и функций
END имя_пакета;

🔄 Где используется

  • В PACKAGE BODY — реализация процедур и функций, объявленных в PACKAGE

  • В TYPE BODY — реализация методов объектных типов

  • Иногда используется в IDE (SQL Developer) для отделения логики от описания

  • Обеспечивает инкапсуляцию и структурированность кода


🧪 10 Примеров использования BODY

1️⃣ Создание тела пакета

sql
CREATE OR REPLACE PACKAGE BODY math_utils IS
FUNCTION double_num(p_num NUMBER) RETURN NUMBER IS
BEGIN
RETURN p_num * 2;
END;
END math_utils;

Реализация функции, объявленной в PACKAGE.


2️⃣ Тело пакета с несколькими процедурами

sql
CREATE OR REPLACE PACKAGE BODY emp_tools IS
PROCEDURE hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Привет!');
END;
PROCEDURE increase_salary(p_id NUMBER, p_percent NUMBER) IS
BEGIN
UPDATE employees SET salary = salary * (1 + p_percent / 100)
WHERE employee_id = p_id;
END;
END emp_tools;

3️⃣ Объявление + реализация (отдельно)

sql
CREATE PACKAGE emp_info AS
PROCEDURE show_all;
END emp_info;
CREATE PACKAGE BODY emp_info AS
PROCEDURE show_all IS
BEGIN
FOR r IN (SELECT * FROM employees) LOOP
DBMS_OUTPUT.PUT_LINE(r.first_name || ‘ ‘ || r.last_name);
END LOOP;
END;
END emp_info;

4️⃣ Создание БОДИ для объектного типа

sql
CREATE OR REPLACE TYPE employee_obj AS OBJECT (
id NUMBER,
MEMBER FUNCTION display RETURN VARCHAR2
);
CREATE OR REPLACE TYPE BODY employee_obj AS
MEMBER FUNCTION display RETURN VARCHAR2 IS
BEGIN
RETURN ‘ID: ‘ || id;
END;
END;

5️⃣ Обновление только БОДИ без изменения спецификации

sql
CREATE OR REPLACE PACKAGE BODY emp_tools IS
-- изменённая реализация
END emp_tools;

6️⃣ BODY с обработкой ошибок

sql
CREATE OR REPLACE PACKAGE BODY err_demo IS
PROCEDURE risky IS
BEGIN
RAISE_APPLICATION_ERROR(-20001, 'Ошибка!');
END;
END;

7️⃣ БОДИ с доступом к глобальным переменным (внутри пакета)

sql
CREATE OR REPLACE PACKAGE BODY session_tools IS
g_user_id NUMBER;
PROCEDURE set_user(p_id NUMBER) IS
BEGIN
g_user_id := p_id;
END;FUNCTION get_user RETURN NUMBER IS
BEGIN
RETURN g_user_id;
END;
END;

8️⃣ БОДИ с вложенными процедурами

sql
CREATE OR REPLACE PACKAGE BODY nested_demo IS
PROCEDURE outer_proc IS
PROCEDURE inner_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Вложенная процедура');
END;
BEGIN
inner_proc;
END;
END;

9️⃣ БОДИ в SQL Developer

Раздел BODY автоматически создаётся в окне «Packages» в IDE для разделения интерфейса и реализации.


🔟 Удаление только BODY

sql
DROP PACKAGE BODY emp_tools;

Удаляет реализацию, но не спецификацию пакета.


🧩 BODY в Oracle SQL. Заключение

Ключевое слово BODY в Oracle SQL играет ключевую роль в структурировании кода и отделении логики от интерфейса. Это основной механизм построения модульных систем, позволяющий:

  • Реализовывать многоразовые процедуры и функции

  • Упростить поддержку и отладку

  • Скрыть реализацию и защитить бизнес-логику

💡 Не забудь:

  • BODY всегда дополняет спецификацию (PACKAGE, TYPE)

  • Можно компилировать и перезаписывать BODY отдельно

  • В теле можно использовать переменные, курсоры и вложенные процедуры


🔜 Следующая статья:

BEGIN в Oracle SQL — как начинать блок PL/SQL кода и управлять выполнением


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии