Similar presentations:
Создание пакетов для группирования взаимосвязанных переменных
1. Создание пакетов
5Создание пакетов
Copyright © Oracle Corporation, 2001. All rights reserved.
2. Рассматриваемые вопросы
• Описание пакетов и перечень их возможныхкомпонентов
• Создание пакетов для группирования
взаимосвязанных переменных, курсоров,
констант, исключений, процедур и функций
• Общедоступные и частные конструкции пакета
• Обращение к конструкциям пакета
• Описание пакета, не содержащего тела
5-2
Copyright © Oracle Corporation, 2001. All rights reserved.
3. Обзор пакетов
• Объединяют логически взаимосвязанные типыPL/SQL, элементы и подпрограммы
• Состоят из двух компонентов:
– Спецификация
– Тело
• Не могут вызываться, принимать параметры и
быть вложенными
• Позволяют Oracle одновременно считывать в
память несколько объектов
5-3
Copyright © Oracle Corporation, 2001. All rights reserved.
4. Компоненты пакета
Спецификацияпакета
Общедоступная
переменная
Объявление
процедуры A
Общедоступная
процедура
Частная переменная
Тело
пакета
Определение
процедуры B
Определение
процедуры A
Частная процедура
Общедоступная
процедура
Локальная
переменная
5-4
Copyright © Oracle Corporation, 2001. All rights reserved.
5. Ссылки на объекты пакета
Спецификацияпакета
Тело
пакета
5-5
Объявление
процедуры A
Определение
процедуры B
Определение
процедуры A
Copyright © Oracle Corporation, 2001. All rights reserved.
6. Разработка пакета
Текстовыйредактор
Код
1
SQL*Plus; TOAD SQLDev
2
Загрузка и выполнение
Oracle
Исходный код
Компиляция
P-код
Выполнение
5-6
Copyright © Oracle Corporation, 2001. All rights reserved.
7. Разработка пакета
• Сохранение текста команды CREATE PACKAGE вдвух отдельных командных файлах SQL
облегчает последующее изменение пакета.
• Спецификация пакета может существовать без
тела пакета, но не наоборот.
5-7
Copyright © Oracle Corporation, 2001. All rights reserved.
8. Создание спецификации пакета
Синтаксис:CREATE [OR REPLACE] PACKAGE имя_пакета
IS|AS
объявления общедоступных типов u элементов
спецификации подпрограмм
END имя_пакета;
• Задание параметра REPLACE приводит к удалению и
повторному созданию спецификации пакета.
• По умолчанию переменные, объявленные в
спецификации пакета, инициализируются как
неопределенные (NULL).
• Все конструкции, объявленные в спецификации
пакета, видимы для других пользователей, которым
предоставлена привилегия на этот пакет.
5-8
Copyright © Oracle Corporation, 2001. All rights reserved.
9. Объявление общедоступных конструкций
Пакет COMM_PACKAGEСпецификация
пакета
5-9
G_COMM
1
Объявление
процедуры
RESET_COMM
2
Copyright © Oracle Corporation, 2001. All rights reserved.
10. Создание спецификации пакета: пример
CREATE OR REPLACE PACKAGE comm_package ISg_comm NUMBER := 0.10; --initialized to 0.10
PROCEDURE reset_comm
(p_comm
IN NUMBER);
END comm_package;
/
5-10
G_COMM – глобальная переменная с начальным
значением 0.10.
RESET_COMM – общедоступная процедура,
реализуемая в теле пакета.
Copyright © Oracle Corporation, 2001. All rights reserved.
11. Создание тела пакета
Синтаксис:CREATE [OR REPLACE] PACKAGE BODY имя_пакета
IS|AS
объявления частных типов u элементов
тела подпрограмм
END имя_пакета;
5-11
Задание параметра REPLACE приводит к удалению и
повторному созданию тела пакета.
Идентификаторы, объявленные только в теле
пакета, являются частными конструкциями. Они
невидимы вне тела пакета.
Все частные конструкции должны быть объявлены
перед (до) их использованием в общедоступных
конструкциях.
Copyright © Oracle Corporation, 2001. All rights reserved.
12. Общедоступные и частные конструкции
Пакет COMM_PACKAGEСпецификация
пакета
Тело
пакета
5-12
G_COMM
1
Объявление процедуры
RESET_COMM
2
Определение функции
VALIDATE_COMM
3
Определение процедуры
RESET_COMM
2
Copyright © Oracle Corporation, 2001. All rights reserved.
13. Создание тела пакета: пример
CREATE OR REPLACE PACKAGE BODY comm_packageIS
FUNCTION validate_comm (p_comm IN NUMBER)
RETURN BOOLEAN
IS
v_max_comm
NUMBER;
BEGIN
SELECT
MAX(commission_pct)
INTO
v_max_comm
FROM
employees;
IF
p_comm > v_max_comm THEN RETURN(FALSE);
ELSE
RETURN(TRUE);
END IF;
END validate_comm;
...
5-13
Copyright © Oracle Corporation, 2001. All rights reserved.
14. Создание тела пакета: пример
PROCEDURE reset_comm (p_commIN NUMBER)
IS
BEGIN
IF validate_comm(p_comm)
THEN
g_comm:=p_comm; --reset global variable
ELSE
RAISE_APPLICATION_ERROR(-20210,'Invalid commission');
END IF;
END reset_comm;
END comm_package;
/
5-14
Copyright © Oracle Corporation, 2001. All rights reserved.
15. Вызов пакетных конструкций
Пример 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;
5-15
Copyright © Oracle Corporation, 2001. All rights reserved.
16. Вызов пакетных конструкций
Пример 2: вызов пакетной процедурыcomm_package.reset_comm(0.15)
Пример 3: вызов пакетной процедуры из другой
схемы.
scott.comm_package.reset_comm(0.15)
Пример 4: вызов пакетной процедуры в удаленной
базе данных.
comm_package.reset_comm@ny_link(0.15)
5-16
Copyright © Oracle Corporation, 2001. All rights reserved.
17. Объявление спецификации без тела пакета
CREATE OR REPLACE PACKAGE global_consts ISmile_2_kilo
CONSTANT NUMBER := 1.6093;
kilo_2_mile
CONSTANT NUMBER := 0.6214;
yard_2_meter
CONSTANT NUMBER := 0.9144;
meter_2_yard
CONSTANT NUMBER := 1.0936;
END global_consts;
/
EXECUTE DBMS_OUTPUT.PUT_LINE('20 miles = '||20*
global_consts.mile_2_kilo||' km')
5-17
Copyright © Oracle Corporation, 2001. All rights reserved.
18. Ссылка на общедоступную переменную из автономной процедуры
Пример: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;
5-18
Copyright © Oracle Corporation, 2001. All rights reserved.
19. Удаление пакетов
Удаление спецификации и тела пакета:DROP PACKAGE имя_пакета;
Удаление тела пакета :
DROP PACKAGE BODY имя_пакета;
5-19
Copyright © Oracle Corporation, 2001. All rights reserved.
20. Разработка пакетов: указания
• Пакеты должны быть как можно более общими.• Прежде, чем определить тело пакета, следует
определить его спецификацию.
• Спецификация пакета должна содержать только
общедоступные конструкции.
• Располагайте элементы в декларативной части
тела пакета, если они должны сохранять значение
в течение сеанса или в разных транзакциях.
• После изменения спецификации пакета требуется
повторная компиляция ссылающихся на него
подпрограмм.
• Спецификация пакета должна включать как можно
меньше конструкций.
5-20
Copyright © Oracle Corporation, 2001. All rights reserved.
21. Преимущества пакетов
Модульность: инкапсуляция связанных конструкций.
Сокрытие информации:
Упрощение проектирования приложений: кодирование и
компиляция спецификации и тела выполняется
отдельно.
– Только объявления, сделанные в спецификации
пакеты видимы и доступны для приложений.
– Частные конструкции в теле пакета скрыты и
недоступны.
– Весь код скрыт в теле пакета.
5-21
Copyright © Oracle Corporation, 2001. All rights reserved.
22. Преимущества пакетов
Дополнительная функциональность: устойчивое
состояние переменных и курсоров
Повышение производительности:
– При первом обращении к компоненте пакета весь
пакет загружается в память
– Все пользователи используют только одну копию
пакета, размещенную в памяти
– Упрощается иерархическая зависимость между
компонентами приложения
5-22
Перезагрузка: несколько подпрограмм с одним и тем
же именем
Copyright © Oracle Corporation, 2001. All rights reserved.
23. Итоги
Использование пакетов:• Улучшает организацию, управление и защиту.
Повышает производительность.
• Позволяет группировать взаимосвязанные
процедуры и функции.
• Позволяет модифицировать тело пакета, не
затрагивая спецификацию.
• Позволяет предоставить право доступа ко
всему пакету.
5-23
Copyright © Oracle Corporation, 2001. All rights reserved.
24. Итоги
• Исходный код скрыт от пользователей• При первом вызове в память загружается весь
пакет
• Уменьшается количество обращений к диску при
выполнении последующих вызовов
• Предоставляются переменные, используемые в
течение сеанса пользователя
5-24
Copyright © Oracle Corporation, 2001. All rights reserved.
25. Итоги
КомандаОписание
CREATE [OR REPLACE]
PACKAGE
Создание (или изменение) спецификации
существующего пакета
CREATE [OR REPLACE]
PACKAGE
BODY
Создание (или изменение) тела
существующего пакета
DROP PACKAGE
Удаление как спецификации, так и тела
пакета
Удаление только тела пакета
DROP PACKAGE BODY
5-25
Copyright © Oracle Corporation, 2001. All rights reserved.
26. Обзор практического занятия 5
• Создание пакетов• Вызов программных единиц из пакета
5-26
Copyright © Oracle Corporation, 2001. All rights reserved.