Создание пакетов для группирования взаимосвязанных переменных

Содержание

Слайд 2

Рассматриваемые вопросы Описание пакетов и перечень их возможных компонентов Создание пакетов

Рассматриваемые вопросы

Описание пакетов и перечень их возможных компонентов
Создание пакетов для группирования

взаимосвязанных переменных, курсоров, констант, исключений, процедур и функций
Общедоступные и частные конструкции пакета
Обращение к конструкциям пакета
Описание пакета, не содержащего тела
Слайд 3

Обзор пакетов Объединяют логически взаимосвязанные типы PL/SQL, элементы и подпрограммы Состоят

Обзор пакетов

Объединяют логически взаимосвязанные типы PL/SQL, элементы и подпрограммы
Состоят из двух

компонентов:
Спецификация
Тело
Не могут вызываться, принимать параметры и быть вложенными
Позволяют Oracle одновременно считывать в память несколько объектов
Слайд 4

Компоненты пакета Объявление процедуры A Определение процедуры A Определение процедуры B

Компоненты пакета

Объявление процедуры A

Определение процедуры A

Определение процедуры B

Общедоступная переменная

Частная переменная

Общедоступная

процедура

Частная процедура

Общедоступная процедура

Локальная переменная

Спецификация
пакета

Тело
пакета

Слайд 5

Ссылки на объекты пакета Спецификация пакета Тело пакета Объявление процедуры A

Ссылки на объекты пакета

Спецификация
пакета

Тело
пакета

Объявление процедуры A

Определение процедуры B

Определение процедуры

A
Слайд 6

Выполнение Разработка пакета SQL*Plus; TOAD SQLDev Код Текстовый редактор Загрузка и

Выполнение

Разработка пакета
SQL*Plus; TOAD SQLDev

Код

Текстовый
редактор

Загрузка и выполнение

2

Исходный код

P-код

Компиляция

Oracle

1

Слайд 7

Разработка пакета Сохранение текста команды CREATE PACKAGE в двух отдельных командных

Разработка пакета

Сохранение текста команды CREATE PACKAGE в двух отдельных командных файлах

SQL облегчает последующее изменение пакета.
Спецификация пакета может существовать без тела пакета, но не наоборот.
Слайд 8

CREATE [OR REPLACE] PACKAGE имя_пакета IS|AS объявления общедоступных типов u элементов

CREATE [OR REPLACE] PACKAGE имя_пакета
IS|AS
объявления общедоступных типов u элементов
спецификации

подпрограмм
END имя_пакета;

Создание спецификации пакета

Синтаксис:

Задание параметра REPLACE приводит к удалению и повторному созданию спецификации пакета.
По умолчанию переменные, объявленные в спецификации пакета, инициализируются как неопределенные (NULL).
Все конструкции, объявленные в спецификации пакета, видимы для других пользователей, которым предоставлена привилегия на этот пакет.

Слайд 9

Пакет COMM_PACKAGE G_COMM Спецификация пакета 1 Объявление общедоступных конструкций Объявление процедуры RESET_COMM 2

Пакет COMM_PACKAGE

G_COMM

Спецификация
пакета

1

Объявление общедоступных конструкций

Объявление процедуры RESET_COMM

2

Слайд 10

Создание спецификации пакета: пример CREATE OR REPLACE PACKAGE comm_package IS g_comm

Создание спецификации пакета: пример

CREATE OR REPLACE PACKAGE comm_package IS
g_comm NUMBER

:= 0.10; --initialized to 0.10
PROCEDURE reset_comm
(p_comm IN NUMBER);
END comm_package;
/

G_COMM – глобальная переменная с начальным значением 0.10.
RESET_COMM – общедоступная процедура, реализуемая в теле пакета.

Слайд 11

Создание тела пакета Синтаксис: CREATE [OR REPLACE] PACKAGE BODY имя_пакета IS|AS

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

Синтаксис:

CREATE [OR REPLACE] PACKAGE BODY имя_пакета
IS|AS
объявления частных типов

u элементов
тела подпрограмм
END имя_пакета;

Задание параметра REPLACE приводит к удалению и повторному созданию тела пакета.
Идентификаторы, объявленные только в теле пакета, являются частными конструкциями. Они невидимы вне тела пакета.
Все частные конструкции должны быть объявлены перед (до) их использованием в общедоступных конструкциях.

Слайд 12

Объявление процедуры RESET_COMM Определение функции VALIDATE_COMM Спецификация пакета Тело пакета 1

Объявление процедуры RESET_COMM

Определение функции VALIDATE_COMM

Спецификация
пакета

Тело
пакета

1

3

2

Определение процедуры RESET_COMM

Пакет COMM_PACKAGE

Общедоступные и

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

G_COMM

2

Слайд 13

Создание тела пакета: пример

Создание тела пакета: пример

Слайд 14

Создание тела пакета: пример

Создание тела пакета: пример

Слайд 15

Вызов пакетных конструкций Пример 1: вызов функции из процедуры в том

Вызов пакетных конструкций

Пример 1: вызов функции из процедуры в том же
пакете.
CREATE

OR REPLACE PACKAGE BODY comm_package IS
. . .
PROCEDURE reset_comm
(p_comm IN NUMBER)
IS
BEGIN
IF validate_comm(p_comm)
THEN g_comm := p_comm;
ELSE
RAISE_APPLICATION_ERROR
(-20210, 'Invalid commission');
END IF;
END reset_comm;
END comm_package;
Слайд 16

Вызов пакетных конструкций Пример 2: вызов пакетной процедуры Пример 3: вызов

Вызов пакетных конструкций

Пример 2: вызов пакетной процедуры
Пример 3: вызов пакетной процедуры

из другой
схемы.
Пример 4: вызов пакетной процедуры в удаленной
базе данных.

comm_package.reset_comm(0.15)

scott.comm_package.reset_comm(0.15)

comm_package.reset_comm@ny_link(0.15)

Слайд 17

Объявление спецификации без тела пакета

Объявление спецификации без тела пакета

Слайд 18

Ссылка на общедоступную переменную из автономной процедуры Пример: CREATE OR REPLACE

Ссылка на общедоступную переменную из автономной процедуры

Пример:

CREATE OR REPLACE PROCEDURE meter_to_yard

(p_meter IN NUMBER, p_yard OUT NUMBER)
IS
BEGIN
p_yard := p_meter * global_consts.meter_2_yard;
END meter_to_yard;
/
DECALRE
yard NUMBER(8,6);
BEGIN
meter_to_yard (1, yard);
dbms_out_put.put_line(yard);
END;
Слайд 19

Удаление спецификации и тела пакета: Удаление тела пакета : DROP PACKAGE

Удаление спецификации и тела пакета:
Удаление тела пакета :

DROP PACKAGE имя_пакета;

Удаление пакетов

DROP

PACKAGE BODY имя_пакета;
Слайд 20

Разработка пакетов: указания Пакеты должны быть как можно более общими. Прежде,

Разработка пакетов: указания

Пакеты должны быть как можно более общими.
Прежде, чем определить

тело пакета, следует определить его спецификацию.
Спецификация пакета должна содержать только общедоступные конструкции.
Располагайте элементы в декларативной части тела пакета, если они должны сохранять значение в течение сеанса или в разных транзакциях.
После изменения спецификации пакета требуется повторная компиляция ссылающихся на него подпрограмм.
Спецификация пакета должна включать как можно меньше конструкций.
Слайд 21

Преимущества пакетов Модульность: инкапсуляция связанных конструкций. Упрощение проектирования приложений: кодирование и

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

Модульность: инкапсуляция связанных конструкций.
Упрощение проектирования приложений: кодирование и компиляция спецификации

и тела выполняется отдельно.
Сокрытие информации:
Только объявления, сделанные в спецификации пакеты видимы и доступны для приложений.
Частные конструкции в теле пакета скрыты и недоступны.
Весь код скрыт в теле пакета.
Слайд 22

Преимущества пакетов Дополнительная функциональность: устойчивое состояние переменных и курсоров Повышение производительности:

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

Дополнительная функциональность: устойчивое состояние переменных и курсоров
Повышение производительности:
При первом

обращении к компоненте пакета весь пакет загружается в память
Все пользователи используют только одну копию пакета, размещенную в памяти
Упрощается иерархическая зависимость между компонентами приложения
Перезагрузка: несколько подпрограмм с одним и тем же именем
Слайд 23

Итоги Использование пакетов: Улучшает организацию, управление и защиту. Повышает производительность. Позволяет

Итоги

Использование пакетов:
Улучшает организацию, управление и защиту. Повышает производительность.
Позволяет группировать взаимосвязанные процедуры

и функции.
Позволяет модифицировать тело пакета, не затрагивая спецификацию.
Позволяет предоставить право доступа ко всему пакету.
Слайд 24

Итоги Исходный код скрыт от пользователей При первом вызове в память

Итоги

Исходный код скрыт от пользователей
При первом вызове в память загружается весь

пакет
Уменьшается количество обращений к диску при выполнении последующих вызовов
Предоставляются переменные, используемые в течение сеанса пользователя
Слайд 25

Команда CREATE [OR REPLACE] PACKAGE CREATE [OR REPLACE] PACKAGE BODY DROP

Команда
CREATE [OR REPLACE] PACKAGE
CREATE [OR REPLACE] PACKAGE BODY
DROP PACKAGE
DROP PACKAGE BODY

Описание
Создание

(или изменение) спецификации существующего пакета
Создание (или изменение) тела существующего пакета
Удаление как спецификации, так и тела пакета
Удаление только тела пакета

Итоги