Проверка в словаре данных:
SELECT TRIGGER_NAME, TRIGGER_TYPE, TABLE_NAME, TRIGGERING_EVENT
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = ' trig2711'
Задача №15
ДАНО: |
Таблицы реляционной базы данных ORACLE |
||||
Таблица |
Реквизиты |
||||
Фильм |
Код фильма, название фильма, режиссер, стоимость, количество экземпляров |
||||
Клиент |
Код клиента, адрес, телефон |
||||
Договор |
Код договора, код фильма, код клиента, дата выдачи, дата возврата |
||||
ТРЕБУЕТСЯ: |
1. Создать триггер, который позволит удалить записи о фильмах из таблицы Фильм, если их нет в таблице Договор или выдаст сообщение о наличие связанных записях. 2. В словаре данных проверить наличие и состояние триггера. 3. Проверить работу триггера. |
||||
РЕШЕНИЕ:
Создание триггера:
При этом автоматически создастся файл trig113.sql, и откроется блокнот для его редактирования. В этот текстовый редактор заносим текст программы:
CREATEORREPLACETRIGGERtrig113
BEFORE DELETE
ON FILM
REFERENCING OLD as old_row
DECLARE
CountDogovor number;
BEGIN
SELECT count(filmid)
INTO CountDogovor
FROM dogovor
WHERE filmid=:old_row.filmid;
if (CountDogovor > 0) THEN
raise_application_error(-20001,
'Необходимо удалить связанные записи из таблицы договор!');
ENDIF;
END;
/
После сохранения созданного, исполняем этот скрипт из командной строки
Запуск триггера на выполнение:
Ввод усечен до 1 символов
Триггер создан.
Выполняем удаление с целью проверки работы триггера:
SQL> delete from film
2 where filmid=9;
delete from film
*
ошибкавстроке 1:
ORA-20001: Необходимо удалить связанные записи из таблицы договор!
ORA-06512: на "EI0101.TRIG113", line 11
ORA-04088: ошибка во время выполнения триггера 'EI0101.TRIG113
Выполняем удаление с целью проверки работы триггера:
SQL> delete from film
2 where filmid=6;
1 строка удалена.
Проверка в словаре данных:
SELECT TRIGGER_NAME, TRIGGER_TYPE, TABLE_NAME, TRIGGERING_EVENT
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = ' trig113'
Задача №16
ДАНО: |
Таблицы реляционной базы данных ORACLE |
||||
Таблица |
Реквизиты |
||||
Фильм |
Код фильма, название фильма, режиссер, стоимость, количество экземпляров |
||||
Клиент |
Код клиента, адрес, телефон |
||||
Договор |
Код договора, код фильма, код клиента, дата выдачи, дата возврата |
||||
ТРЕБУЕТСЯ: |
1. Создать триггер, который облегчает работу заполнения БД при работе с таблицами Договор и Фильм, если фильм с номером вернули, то надо подсчитать, сколько стоит услуга. 2. В словаре данных проверить наличие и состояние триггера. 3. Проверить работу триггера. |
||||
РЕШЕНИЕ:
Создание триггера:
При этом автоматически создастся файл trig274.sql, и откроется блокнот для его редактирования. В этот текстовый редактор заносим текст программы:
CREATEORREPLACETRIGGER trig274
AFTER UPDATE
ON Dogovor
REFERENCING OLD AS old_row NEW AS new_row
FOR EACH ROW
DECLARE
Stoim NUMBER;
Prok NUMBER;
Itog NUMBER;
BEGIN
Stoim := 0;
IF (:new_row.vozvrat IS NOT NULL) THEN
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.