
- •Лабораторная работа № 11. Пакеты oracle pl/sql
- •Цель работы
- •2 Методические указания
- •3 Задания к лабораторной работе № 11
- •4. Теоретический материал Создание пакетов
- •Правила построения пакетов
- •Спецификация пакета
- •Указания по разработке пакетов:
- •Правила вызова элементов пакета
- •Удаление пакетов
- •Перегрузка пакетов
- •Порядок разрешения вызова
- •Предварительное объявление
- •Одноразовые процедуры
- •Побочные эффекты
- •Ограничение функции в правах обращения
- •Курсорные переменные и пакеты
Лабораторная работа № 11. Пакеты oracle pl/sql
Цель работы
Получить общее представление о пакетах ORACLE PL/SQL, научиться составлять и применять пакеты, используя различные типы курсоров, процедуры и функции.
2 Методические указания
Лабораторная работа направлена на ознакомление с процедурами и функциями языка PL/SQL, а также на изучение основных принципов работы с ними.
Требования к результатам выполнения лабораторного практикума:
• при выполнении задания необходимо сопровождать все реализованные процедуры и функции набором тестовых входных и выходных данных и описаниями к ним;
• при внесении изменений в базу данных с помощью языка DML использовать операторы управления транзакциями, в частности оператор COMMIT или ROLLBACK, для их корректного завершения;
• по завершении выполнения задания составить отчет о проделанной работе.
3 Задания к лабораторной работе № 11
Создать Пакет на изменение зарплаты сотрудника, проверяющей, находится ли она в заданных должностных рамках. Рамки зарплаты берутся из таблицы JOBS. Если назначенная зарплата меньше минимально возможной, то установить сотруднику минимально возможную зарплату (min_salary). И наоборот, если назначенная зарплата больше максимально возможной, то установить сотруднику максимально возможную зарплату (max_salary).
Данное задание отличается тем, что еще используется внутренняя приватная переменная. Задание звучит так: добавить к пакету 1 задания функцию, возвращающую текст ошибки, если таковая возникла. Если не было ошибки или пакет еще не использовался, то функция должна выдавать NO ERRORS. Текст ошибки должен храниться в памяти (но не в базе данных), то есть посмотреть его мы можем в любой момент и только с помощью выше указанной функции. (это уточнение для того, чтобы использовали приватную переменную).
4. Теоретический материал Создание пакетов
Пакет — это объект базы данных, который группирует логически связанные типы, программные объекты и подпрограммы PL/SQL. Еще их называют модулями. Сама концепция пакета в PL/SQL пришла все из того же языка программирования Ada. Пакет позволяет в точном определении хранить связанные объекты в одном месте. В предыдущих лабораторных работах вы пользовались пакетом для вывода данных на экран.
DBMS_OUTPUT.enable;
DBMS_OUTPUT.put_line('HELLO WORLD!');
При установке сервера Oracle - происходит установка очень большого количества пакетов. Для работы с динамическими запросами DBMS_SQL, для работы с Web пакет DBMS_WEB и т.д. Все это огромное количество готового кода, который разработчики фирмы Oracle предоставляют в ваше распоряжение.
Слева хорошо виден сам пакет, а справа первая сверху строчка "procedure put_line(a varchar2);" и есть как раз функция вывода "на экран". В отличие от процедур и функций, которые могут содержаться локально в блоке или храниться в базе данных, пакеты могут быть только хранимыми и никогда локальными. При использовании пакетов, производительность системы увеличивается. По своей сути модуль представляет собой именованный раздел объявлений. В него могут входить различные объявления, как то:
процедуры
функции
типы
курсоры
Пакеты обычно состоят из двух частей, спецификации и тела, хотя иногда в теле нет необходимости. СПЕЦИФИКАЦИЯ пакета – это интерфейс с вашими приложениями; она объявляет типы, переменные, константы, исключения, курсоры и подпрограммы, доступные для использования в пакете. ТЕЛО пакета полностью определяет курсоры и подпрограммы, тем самым реализуя спецификацию пакета.
В отличие от подпрограмм, пакеты нельзя вызывать, передавать им параметры или вкладывать их друг в друга. В остальном формат пакета аналогичен формату подпрограммы:
PACKAGE имя IS -- спецификация (видимая часть)
-- объявления общих типов и объектов
-- спецификации подпрограмм
END [имя];
PACKAGE BODY имя IS -- тело (скрытая часть)
-- объявления личных типов и объектов тела подпрограмм
[BEGIN
-- предложения инициализации]
END [имя];
Спецификация содержит общие объявления, которые видимы вашему приложению. Тело содержит детали реализации и личные объявления, которые скрыты от вашего приложения.
Вы можете отлаживать, развивать или заменять тело пакета, не изменяя интерфейса к этому телу (т.е. спецификации пакета).
Пакеты создаются интерактивно в SQL*Plus или SQL*DBA с помощью команд CREATE PACKAGE и CREATE PACKAGE BODY.
После их размещения, на них можно ссылаться из других блоков PL/SQL. Пакеты собирают типы данных PL/SQL, элементы и подпрограммы в один контейнер. Например, пакет, используемый отделом кадров, может содержать процедуры для найма и увольнения служащих, функции для расчета комиссионных и премий, а также переменные освобождения от налогов.