Создание пакетов
Рассматриваемые вопросы
Обзор пакетов
Компоненты пакета
Ссылки на объекты пакета
Разработка пакета
Разработка пакета
Создание спецификации пакета
Объявление общедоступных конструкций
Создание спецификации пакета: пример
Создание тела пакета
Общедоступные и частные конструкции
Создание тела пакета: пример
Создание тела пакета: пример
Вызов пакетных конструкций
Вызов пакетных конструкций
Объявление спецификации без тела пакета
Ссылка на общедоступную переменную из автономной процедуры
Удаление пакетов
Разработка пакетов: указания
Преимущества пакетов
Преимущества пакетов
Итоги
Итоги
Итоги
Обзор практического занятия 5
347.50K
Categories: programmingprogramming informaticsinformatics

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

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 IS
g_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_package
IS
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_comm
IN 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 IS
mile_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.
English     Русский Rules