Открыть сервис

PL/SQL

PL/SQL (Procedural Language / Structured Query Language) — это процедурное расширение языка SQL, разработанное корпорацией Oracle для использования в системах управления базами данных (СУБД) Oracle Database и некоторых других СУБД (например, TimesTen, IBM Db2 — с адаптациями). PL/SQL объединяет возможности SQL (язык запросов и манипулирования данными) с процедурными конструкциями, такими как переменные, циклы, условия, обработка ошибок и подпрограммы (процедуры, функции, пакеты). Основная цель PL/SQL — создание сложной бизнес-логики, хранимой и выполняемой непосредственно на сервере базы данных, что повышает производительность, безопасность и целостность данных.

История

PL/SQL был разработан компанией Oracle в конце 1980-х годов. Первая версия языка появилась в 1991 году в составе СУБД Oracle 6.0. Язык был создан как ответ на потребность в создании эффективных, переносимых и безопасных серверных приложений, которые могли бы обрабатывать данные без постоянного обмена между клиентом и сервером. В 1992 году с выходом Oracle 7 PL/SQL получил поддержку хранимых процедур, функций и пакетов. В 1997 году в Oracle 8 была добавлена поддержка объектно-ориентированного программирования (типы объектов, наследование). В 2001 году в Oracle 9i появились коллекции (вложенные таблицы, массивы VARRAY) и улучшенная обработка исключений. В 2007 году с Oracle 11g была введена поддержка условной компиляции и улучшена производительность. В 2013 году с Oracle 12c PL/SQL получил поддержку SQL-операций в пакетном режиме, а в 2018 году с Oracle 18c — возможность использования в автономных транзакциях. На 2025 год PL/SQL остаётся основным языком для разработки серверной логики в экосистеме Oracle, хотя его использование сокращается в пользу более современных подходов (например, Java в БД, микросервисы).

Архитектура и принцип работы

PL/SQL — это интерпретируемый язык, но его код компилируется в байт-код (P-код), который хранится в базе данных и выполняется виртуальной машиной PL/SQL Engine. Этот движок встроен в ядро СУБД Oracle, что позволяет выполнять код непосредственно на сервере, без передачи данных клиенту. Код PL/SQL может быть выполнен как в явном виде (вызов процедуры или функции), так и неявно (триггеры, автоматически срабатывающие при событиях DML — INSERT, UPDATE, DELETE). Архитектура включает:

Синтаксис и основные конструкции

PL/SQL — блочно-структурированный язык. Каждый блок состоит из трёх разделов: объявления (DECLARE), исполнения (BEGIN ... END) и обработки исключений (EXCEPTION). Блок может быть анонимным или именованным (процедура, функция, пакет).

Пример анонимного блока:

``sql DECLARE v_name VARCHAR2(50); BEGIN SELECT first_name INTO v_name FROM employees WHERE employee_id = 100; DBMS_OUTPUT.PUT_LINE('Employee: ' || v_name); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No employee found'); END; ``

Основные конструкции:

Типы подпрограмм

Хранимые процедуры и функции

Хранимые процедуры и функции — это именованные блоки PL/SQL, которые компилируются и сохраняются в базе данных. Они могут принимать параметры (IN, OUT, IN OUT) и возвращать значения (функции — обязательно, процедуры — опционально через OUT-параметры). Пример:

``sql CREATE OR REPLACE FUNCTION get_salary(p_emp_id NUMBER) RETURN NUMBER IS v_salary employees.salary%TYPE; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = p_emp_id; RETURN v_salary; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL; END; ``

Пакеты

Пакет (PACKAGE) — это сгруппированный набор связанных процедур, функций, переменных, констант, курсоров и исключений. Пакет состоит из двух частей: спецификации (PUBLIC — интерфейс) и тела (PRIVATE — реализация). Пакеты позволяют инкапсулировать логику, управлять областью видимости, улучшать производительность (весь пакет загружается в память при первом вызове). Пример:

``sql CREATE OR REPLACE PACKAGE emp_pkg IS FUNCTION get_salary(p_emp_id NUMBER) RETURN NUMBER; PROCEDURE update_salary(p_emp_id NUMBER, p_new_salary NUMBER); END emp_pkg; ``

Триггеры

Триггеры — это хранимые блоки PL/SQL, которые автоматически выполняются при определённых событиях (INSERT, UPDATE, DELETE) на таблице или представлении, а также при системных событиях (LOGON, LOGOFF, DDL). Триггеры могут быть BEFORE, AFTER, INSTEAD OF, на уровне строки или оператора.

Типы данных

PL/SQL поддерживает все типы данных SQL (NUMBER, VARCHAR2, DATE, CLOB, BLOB и др.), а также собственные процедурные типы:

Применение

PL/SQL широко применяется в корпоративных информационных системах, построенных на Oracle Database, для:

Преимущества и недостатки

Преимущества:

Недостатки:

Инструменты разработки

Для разработки на PL/SQL используются:

Версии и совместимость

PL/SQL развивается вместе с Oracle Database. Основные версии:

Альтернативы PL/SQL

В других СУБД существуют аналоги PL/SQL:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →