4.Вывести порядок приготовления блюда и название блюда с количе- ством углеводов больше определенного значения или количеством калорий больше указанного значения.
Вариант 7
1.Вывести список сотрудников с указанной должностью.
2.Вывести список документов, в содержании которых встречается ука- занный фрагмент слова.
3.Вывести дату регистрации, тип документа, ФИО регистратора и на- звание организации для документов, зарегистрированных в указан- ный период.
4.Вывести список зарегистрированных документов с определенным типом документа или с датой регистрации больше указанного значе- ния.
Вариант 8
1.Вывести список сотрудников с указанной причиной увольнения.
2.Вывести список документов с датой регистрации в указанный пери- од.
3.Вывести дату регистрации, причину увольнения, ФИО сотрудника для документов, зарегистрированных в указанный период.
4.Вывести список зарегистрированных документов с кодом документа в указанном диапазоне.
Вариант 9
1.Вывести список сотрудников, бравших отпуск указанного типа.
2.Вывести список документов с датой регистрации в указанный пери- од.
3.Вывести дату регистрации, тип отпуска, ФИО сотрудника для доку- ментов, зарегистрированных в указанный период.
4.Вывести список зарегистрированных документов с кодом документа в указанном диапазоне.
70
Вариант 10
1.Вывести список сотрудников с указанной должностью.
2.Вывести список документов, в содержании которых встречается ука- занный фрагмент слова.
3.Вывести дату регистрации, тип документа, ФИО отправителя и на- звание организации для документов, зарегистрированных в указан- ный период.
4.Вывести список зарегистрированных документов с указанным типом документа или с кодом документа меньше определенного значения.
Вариант 11
1.Вывести список сотрудников, назначенных на указанную должность.
2.Вывести список документов с датой регистрации в указанный пери- од.
3.Вывести дату регистрации, должность, ФИО сотрудника для доку- ментов, зарегистрированных в указанный период.
4.Вывести список зарегистрированных документов с кодом документа в указанном диапазоне.
Вариант 12
1.Вывести список оборудования с указанным типом.
2.Вывести список оборудования, которое брал в прокат определенный клиент.
3.Вывести список лиц, бравших оборудование в прокат, отсортиро- ванный по количеству их обращений, а также количество этих обра- щений.
4.Вывести информацию о клиентах, отсортированных по адресам.
Вариант 13
1.Вывести список оборудования с указанным типом.
2.Вывести список оборудования, которое списал определенный со- трудник.
3.Вывести количество списанного оборудования, сгруппированного по типам оборудования.
4.Вывести информацию о сотрудниках с датой приема на работу больше определенной даты.
Вариант 14
1.Вывести список цветков с указанным типом листа.
2.Вывести список кодов поступлений, по которым продано цветов на суммы больше определенного значения.
3.Вывести дату поступления, сумму, названия поставщика и цветов по определенному коду поставщика.
4.Вывести список цветов и сорт для цветов с высотой больше опреде- ленного числа или цветущий.
71
Вариант 15
1.Вывести список клиентов, заехавших в номера в указанный период.
2.Вывести общую сумму оплат за номера для каждого клиента.
3.Вывести дату заезда, тип номера, ФИО клиентов, зарегистрирован- ных в указанный период.
4.Вывести список зарегистрированных клиентов в номерах определен- ного типа.
Вариант 16
1.Вывести список оборудования с указанным типом.
2.Вывести список оборудования, которое брал в прокат определенный клиент.
3.Вывести список лиц, бравших оборудование в прокат, и количество их обращений, отсортированных по количеству обращений по убы- ванию.
4.Вывести информацию о клиентах, отсортированных по адресам.
Вариант 17
1.Вывести список ценностей с закупочной стоимостью больше опре- деленного значения или сроком гарантии больше указанного числа.
2.Вывести список мест нахождения материальных ценностей, в назва- нии которых встречается указанное слово.
3.Вывести сумму стоимости ценностей с кодом в указанном диапазо- не.
4.Вывести список материально-ответственных лиц с датой приема на работу в указанном диапазоне.
Вариант 18
1.Вывести список ремонтных работ, выполненных определенным мас- тером.
2.Вывести список этапов работ, входящих в работы, в названии кото- рых встречается указанное слово.
3.Вывести сумму стоимости этапов ремонтных работ для работ с ко- дом в указанном диапазоне.
4.Вывести список мастеров с датой приема на работу в указанном диа- пазоне.
Вариант 19
1.Вывести список лекарств с определенным показанием.
2.Вывести список номеров чеков, по которым продано больше опреде- ленного числа лекарств.
3.Вывести дату продажи, сумму, ФИО кассира и лекарство по чеку с указанным номером.
4.Вывести список лекарств и единицы измерения для лекарств с коли- чеством в упаковке больше указанного числа или кодом лекарства меньше определенного значения.
72
Вариант 20
1.Вывести список сотрудников с указанной должностью.
2.Вывести список документов, в содержании которых встречается ука- занный фрагмент слова.
3.Вывести дату регистрации, тип документа, ФИО исполнителя и факт исполнения для документов, зарегистрированных в указанный пери- од.
4.Вывести список зарегистрированных документов с указанным типом документа или с кодом документа в определенном диапазоне.
Лабораторная работа №6
СОЗДАНИЕ ТРИГГЕРОВ В ORACLE
Цель работы – научиться создавать и использовать триггеры в Oracle.
Содержание работы:
1.Проработка всех примеров, анализ результатов их выполнения в утилите SQL *Plus Worksheet. Проверка наличия созданных триггеров в текущей схеме.
2.Проверка всех выполненных примеров в утилите Enterprise
MANAGER Console.
3.Выполнение всех примеров и заданий по ходу лабораторной работы.
4.Выполнение индивидуальных заданий по вариантам.
Пояснения к выполнению работы
Для освоения программирования триггеров используем пример базы данных в табличном пространстве DB_Books, которая была создана в ла- бораторной работе №1. При выполнении примеров и заданий обращайте внимание на соответствие названий таблиц и других объектов проекта.
Триггер базы данных — это процедура PL/SQL, которая автоматически запускается при возникновении определенных событий, связанных с вы- полнением операций вставки, удаления или модификации данных табли- цы. Событие, управляющее запуском триггера, описывается в виде логиче- ских условий. Когда возникает событие, соответствующее условиям триг- гера, сервер Oracle автоматически запускает триггер, то есть интерпрети- рует код программы триггера, записанный на языке PL/SQL.
В основном триггеры используются для реализации сложных ограни- чений целостности данных, которые невозможно осуществить через опи- сательные ограничения, устанавливаемые при создании таблиц, организа- ции всевозможных видов аудита, автоматического оповещения других мо- дулей о том, что делать в случае изменения информации, содержащейся в
73
таблице БД, для реализации "бизнес-правил", для организации каскадных воздействий на таблицы БД.
Строковые и операторные триггеры
Синтаксис:
CREATE [OR REPLACE] TRIGGER имя_триггера
BEFORE | AFTER активизирующее_событие ON ссылка_на_таблицу FOR EACH ROW [WHEN условие_срабатывания]
тело_триггера
где активизирующее_событие указывает момент активации триггера BEFORE до срабатывания оператора DML, а AFTER – после срабатыва- ния оператора DML.
FOR EACH ROW указывает на активацию триггера от воздействия на каждую строку в наборе строк, без этого указателя триггер запускается по- сле или до оператора DML в целом.
Порядок активации триггеров в большинстве случаев таков:
1)Выполняется операторный триггер BEFORE (при его наличии).
2)Для каждой строки, на которую воздействует оператор:
-выполняется строковый триггер BEFORE (при его наличии);
-выполняется собственно оператор;
-выполняется строковый триггер AFTER (при его наличии).
3)Выполняется операторный триггер AFTER (при его наличии).
Псевдозаписи
При создании строковых триггеров можно использовать псевдозаписи :old и :new. Строковый триггер срабатывает один раз для каждой строки. При этом внутри триггера можно обращаться к строке, обрабатываемой в данный момент времени, применяя псевдозаписи.
Например:
CREATE OR REPLACE TRIGGER ADMIN_BOOKS.Trigger1 BEFORE DELETE ON ADMIN_BOOKS.Authors FOR EACH ROW DECLARE
a ADMIN_BOOKS.Authors.Code_author%TYPE;
b ADMIN_BOOKS.Authors.Name_Author%TYPE; c ADMIN_BOOKS.Authors.Birthday%TYPE;
BEGIN
a:= :old.Code_author; b:= :new.Name_Author; c:= :old.Birthday;
74