Разработка программы, обеспечивающую с помощью средств языка С++ ввод анкетных данных студентов и вывод в табличном виде списка студентов, отобранных по заданному условию, страница 10

Проверка в словаре данных:

SELECT TRIGGER_NAME, TRIGGER_TYPE, TABLE_NAME, TRIGGERING_EVENT

FROM USER_TRIGGERS

WHERE TRIGGER_NAME = ' trig2711'

Задача №15

ДАНО:

Таблицы реляционной базы данных ORACLE

 

Таблица

Реквизиты

Фильм

Код фильма, название фильма, режиссер, стоимость, количество экземпляров

 

Клиент

Код клиента, адрес, телефон

 

Договор

Код договора, код фильма, код клиента, дата выдачи, дата возврата

 

ТРЕБУЕТСЯ:

1.  Создать триггер, который позволит  удалить записи о фильмах из таблицы Фильм, если  их нет в таблице Договор или  выдаст  сообщение о наличие связанных записях.

2.  В словаре данных проверить наличие и состояние триггера.

3.  Проверить работу триггера.

 

РЕШЕНИЕ:

Создание триггера:

SQL> edit trig113

При этом автоматически создастся файл trig113.sql, и откроется блокнот для его редактирования. В этот текстовый редактор заносим текст программы:

CREATEORREPLACETRIGGERtrig113

BEFORE DELETE

 ON FILM

 REFERENCING OLD as old_row

 FOR EACH 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;

/

После сохранения созданного, исполняем этот скрипт из командной строки

Запуск триггера на выполнение:

SQL>@trig113

Ввод усечен до 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.  Проверить работу триггера.

 

РЕШЕНИЕ:

Создание триггера:

SQL> edit trig274

При этом автоматически создастся файл 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