Пакет - это объект схемы, который объединяет логически зависимые типы PL/SQL, данные и подпрограммы. Пакет состоит из двух частей: спецификации пакета и тела пакета.
В спецификации пакета объявляются доступные типы, переменные, константы, исключения, курсоры и подпрограммы.
В теле пакета содержится определение курсоров и реализация подпрограмм. Все элементы, объявляемые в теле пакета, невидимы для приложения, что позволяет скрывать от пользователя детали реализации подпрограмм.
Определение спецификации пакета выполняется оператором CREATE PACKAGE, который может иметь следующее формальное описание:
CREATE PACKAGE name AS -- Спецификация (видимая часть)
-- Объявление общедоступных типов и переменных
-- Спецификация подпрограмм
END [name];
Определение тела пакета выполняется оператором CREATE PACKAGE BODY, который может иметь, с некоторыми сокращениями, следующее формальное описание:
CREATE PACKAGE BODY name AS -- Тело пакета (скрытая часть)
-- Объявление локальных типов и переменных
-- Тела подпрограмм
END [name];
Например:
CREATE PACKAGE tbl_rows AS -- Спецификация пакета
TYPE RecTBL1 IS RECORD (tbl1f1 INTEGER, tbl1f2 REAL);
PROCEDURE insert_tbl1 (f1 INTEGER, f2 REAL);
END tbl_rows;
CREATE PACKAGE BODY tbl_rows AS -- Тело пакета
PROCEDURE insert_tbl1 (f1 INTEGER, f2 REAL) IS
BEGIN
INSERT INTO tbl1 VALUES (f1,f2);
END insert_tbl;
END tbl_rows;
На общедоступные элементы пакета - типы, переменные и методы, можно ссылаться из триггеров, хранимых подпрограмм или OCI-приложений, используя следующий синтаксис: package_name.item_name.
Вызов пакетной процедуры из встроенного SQL может быть реализован в анонимом блоке PL/SQL, для выполнения которого используется SQL-оператор EXECUTE.
Например:
EXEC SQL EXECUTE BEGIN tbl_rows.insert_tbl1(1, 200); END;