Что такое PL/SQL и как он относится к SQL

🟢 PL/SQL Oracle. Введение

В любой современной информационной системе данные занимают ключевое место. Для их хранения и обработки используют реляционные базы данных, а стандартным языком работы с ними является SQL (Structured Query Language). Однако в реальных задачах часто возникает необходимость не только получать или изменять данные, но и реализовывать сложную бизнес-логику: выполнять вычисления, управлять условиями, обрабатывать ошибки, автоматизировать процессы. Обычного SQL для этого недостаточно. Именно здесь на помощь приходит PL / SQL (Procedural Language/SQL) — процедурное расширение SQL, разработанное компанией Oracle.

В этой статье разберём:

  • что такое SQL и его возможности;

  • зачем появился PL / SQL и какие задачи решает;

  • устройство языка PL / SQL;

  • ключевые конструкции (переменные, условия, циклы, процедуры, функции, триггеры);

  • примеры практического применения;

  • сходства и различия SQL и PL / SQL.


SQL: основа работы с данными

SQL — это декларативный язык запросов. Он позволяет описать, какие данные нам нужны, но не требует объяснять, как именно их получать.

Основные возможности SQL:

  • Манипуляция данными:

  • Определение структуры (DDL):

    • CREATE TABLE, ALTER TABLE, DROP TABLE;

    • создание индексов, представлений, ограничений.

  • Управление доступом:

    • GRANT, REVOKE.

  • Транзакции:

    • COMMIT, ROLLBACK, SAVEPOINT.

Пример простого SQL-запроса:

SELECT last_name, salary
FROM employees
WHERE department_id = 50
ORDER BY salary DESC;

Этот запрос извлекает список сотрудников из отдела 50 и сортирует их по зарплате.

SQL отлично справляется с манипуляцией данными, но у него есть ограничения:

  • отсутствуют переменные;

  • нет условных операторов (IF, CASE используется только в запросах, но не как полноценный оператор);

  • нет циклов и функций в привычном понимании;

  • невозможно организовать структурированную программу.


Возникновение PL/SQL

Для того чтобы программная логика могла исполняться прямо на стороне базы данных, компания Oracle разработала язык ПИЭЛЬ/ЭСКЮЭЛЬ.

Основные цели создания:

  1. Объединить SQL и процедурное программирование.
    SQL остался ядром для работы с данными, а PL/SQL добавил переменные, условия, циклы и обработку ошибок.

  2. Снизить нагрузку на сеть.
    Вместо множества отдельных SQL-запросов можно упаковать логику в один PL/SQL-блок и выполнить её целиком внутри базы.

  3. Централизация бизнес-логики.
    Логика хранится на уровне БД, а не только в приложениях. Это облегчает поддержку и обеспечивает единые правила для всех клиентов.

В следующем блоке покажем основные элементы PL/SQL.


Основы PL/SQL

Структура PL/SQL-блока

Каждая программа на PL/SQL строится из блоков. Блок имеет следующую структуру:

DECLARE
-- раздел объявлений (переменные, константы, курсоры, типы)
BEGIN
-- основной исполняемый код (SQL + процедурные операторы)
EXCEPTION
-- обработка ошибок
END;

Пример:

DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM employees
WHERE department_id = 10;

DBMS_OUTPUT.PUT_LINE('Количество сотрудников: ' || v_count);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Произошла ошибка при выполнении запроса.');
END;


Переменные и типы данных в PL/SQL

В PL / SQL можно объявлять переменные различных типов:

DECLARE
v_name VARCHAR2(50);
v_salary NUMBER(8,2);
v_hire_date DATE := SYSDATE;
BEGIN
v_name := 'Иван Иванов';
v_salary := 75000;
DBMS_OUTPUT.PUT_LINE('Имя: ' || v_name || ', зарплата: ' || v_salary);
END;

Особенность: переменные могут наследовать типы из таблиц (через %TYPE):

DECLARE
v_emp_name employees.first_name%TYPE;
BEGIN
SELECT first_name INTO v_emp_name FROM employees WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE('Имя сотрудника: ' || v_emp_name);
END;

Условные конструкции в PL/SQL

PL / SQL поддерживает стандартные условия:

IF v_salary > 50000 THEN
DBMS_OUTPUT.PUT_LINE('Высокая зарплата');
ELSIF v_salary BETWEEN 30000 AND 50000 THEN
DBMS_OUTPUT.PUT_LINE('Средняя зарплата');
ELSE
DBMS_OUTPUT.PUT_LINE('Низкая зарплата');
END IF;

Циклы

PL/SQL поддерживает несколько видов циклов:

1)  LOOP

DECLARE
i NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Итерация: ' || i);
i := i + 1;
EXIT WHEN i > 5;
END LOOP;
END;

2) WHILE

DECLARE
i NUMBER := 1;
BEGIN
WHILE i <= 5 LOOP
DBMS_OUTPUT.PUT_LINE('Счётчик: ' || i);
i := i + 1;
END LOOP;
END;

3) FOR

BEGIN
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('i = ' || i);
END LOOP;
END;
Особый интерес вызывают процедуры PL / SQL.

Процедуры и функции PL/SQL

Процедуры

Процедура — это блок PL / SQL, который можно вызывать многократно.

CREATE OR REPLACE PROCEDURE raise_salary (
p_emp_id IN employees.employee_id%TYPE,
p_percent IN NUMBER
) IS
BEGIN
UPDATE employees
SET salary = salary * (1 + p_percent / 100)
WHERE employee_id = p_emp_id;

DBMS_OUTPUT.PUT_LINE('Зарплата сотрудника ' || p_emp_id || ' увеличена.');
END;

Функции

Функция отличается тем, что возвращает значение:

CREATE OR REPLACE FUNCTION get_salary (
p_emp_id IN employees.employee_id%TYPE
) RETURN NUMBER IS
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE employee_id = p_emp_id;
RETURN v_salary;
END;

Пакеты

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

CREATE OR REPLACE PACKAGE hr_utils AS
PROCEDURE raise_salary(p_emp_id IN NUMBER, p_percent IN NUMBER);
FUNCTION get_salary(p_emp_id IN NUMBER) RETURN NUMBER;
END hr_utils;

Триггеры

Триггеры позволяют автоматически запускать код при определённых событиях (например, при вставке записи в таблицу).

CREATE OR REPLACE TRIGGER check_salary
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary < 1000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Зарплата слишком мала');
END IF;
END;

Обработка ошибок (EXCEPTION)

PL / SQL обладает мощным механизмом обработки ошибок:

BEGIN
UPDATE employees SET salary = salary * 2 WHERE department_id = 10;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Нет данных');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Произошла ошибка: ' || SQLERRM);
END;

Отличие SQL и PL/SQL

КритерийSQLPL/SQL
Тип языкаДекларативныйПроцедурный (надстройка над SQL)
ИспользованиеЗапросы к даннымПрограммная логика внутри БД
ПеременныеНетЕсть
УсловияОграниченные (CASE)Полные (IF, ELSE)
ЦиклыНетЕсть
МодулиНетПроцедуры, функции, пакеты
АвтоматизацияНетТриггеры, обработчики ошибок

Практическое применение PL/SQL

  • Автоматическая проверка данных при вставке (триггеры).

  • Массовая обработка данных (процедуры).

  • Вычисление агрегатов с логикой (функции).

  • Централизация бизнес-правил в базе данных.

  • Снижение нагрузки на сеть (логика выполняется внутри БД).


🧩 PL/SQL Oracle. Заключение

  • SQL — язык для работы с данными.

  • PL / SQL — процедурное расширение SQL, которое превращает его в полноценный язык программирования.

  • Вместе они обеспечивают мощный инструментарий для построения сложных приложений, где бизнес-логика интегрирована прямо в базу данных.

👉 Подробнее см. в официальной документации Oracle: PL/SQL Language Reference

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

Реальные кейсы применения PL/SQL в бизнесе


 

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