Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
15.04.2015
Размер:
52.22 Кб
Скачать

Создать триггер, запрещающий удаление неисправности из справочника, если имеются ремонтные заявки с данной неисправностью.

CREATE EXCEPTION e_delete 'Удаление запрещено';

SET TERM !! ;

Выберите операторы для написания текста триггера:

3) CREATE TRIGGER tr_disrep FOR disrepair

BEFORE DELETE AS DECLARE VARIABLE failure INTEGER;

BEGIN FOR SELECT failurecd FROM request

INTO :failure DO BEGIN IF (OLD.failurecd=:failure) THEN

EXCEPTION e_delete;

END

END!!

SET TERM ; !!

Запрос, который используется, если требуется заново создать триггер со старым именем:

4) RECREATE TRIGGER

Создать триггер, который запрещает удаление абонентов из таблицы PAYSUMMA, если PAYSUM<=160рублей.

1) begin

if (old.paysum<=160) then

begin

exception e_pay;

end

end

3) begin

if (old.paysum<=160) then exception e_pay;

end

Запрос, который создает триггер, если он еще не существует, или изменяет существующий триггер с указанным именем и перекомпилирует его:

4) Среди перечисленных ответов нет правильного

Запрос, который пытается удалить триггер, если он уже существует, и создать полностью новый объект:

4) RECREATE TRIGGER

Создана таблица с помощью следующего запроса

create table NachSumma

(accountcd varchar(6),

maxsum numeric(15,2), CurTimeDate timestamp) ;

Создан триггер, который при вставке или обновлении записи в таблице Nachislsumma добавляет в созданную таблицу НЛС абонента, сумму начисления, текущую дату и время, если вводимое значение суммы начисления будет больше максимального значения из всех имеющихся начислений.

create trigger tui_nahislsumma for nachislsumma

Продолжите текст триггера

2) before insert or update

as

declare variable summa numeric(15,2);

begin

select max(nachislsum) from nachislsumma

into :summa;

if (new.nachislsum>summa) then

insert into NachSumma values(new.accountcd,new.nachislsum,current_timestamp);

end

Создать триггер, который запрещает вставку строк в таблицу PAYSUMMA с датой оплаты, ранее текущей.

CREATE TRIGGER Pay FOR PAYSUMMA

BEFORE INSERT

AS

Выберите операторы для продолжения текста триггера:

1) declare variable r date;

begin

r = cast('today' as date);

if (new.paydate < r) then

exception e_pay;

end

Необходимо написать триггер, предотвращающий вставку NULL значений в поле внешнего ключа STREETCD таблицы ABONENT.

CREATE TRIGGER Null_Street FOR ABONENT

AFTER INSERT

AS

Выберите операторы для продолжения текста триггера:

3) begin

if (new.streetcd is null) then exception e_abonent;

end

Изменить существующий триггер, отвечающий за реализацию типа ссылочной целостности D:R (DELETE Restrict) между таблицами SERVICES и PAYSUMMA на D:SN (DELETE Set Null).

ALTER TRIGGER TU_SERVICES

AS

Выберите операторы для продолжения текста триггера:

1) update paysumma

set serviceCD = NULL

where serviceCD = OLD. serviceCD;

end

Дана таблица PAYSUMMA. Разработать триггер, который запрещает изменение размера оплаты у абонента, если общая стоимость всех оплат этим абонентом не превышает 1000 рублей.

CREATE TRIGGER Pay_tr FOR PAYSUMMA

BEFORE UPDATE AS

Выберите операторы для продолжения текста триггера:

5) declare variable i integer;

begin

for select accountcd from paysumma group by

accountcd having sum(paysum)<=1000 into i

do begin

if (i = old.accountcd AND old.paysum <> new.paysum) then exception UPD_RESTRICT;

end

end

Создать триггер, запрещающий вставку в таблицу NACHISLSUMMA фактов начислений с суммой менее 30 рублей.

1) CREATE TRIGGER nach_insert FOR nachislsumma

BEFORE INSERT AS BEGIN IF (NEW.nachislsum < 30)

THEN EXCEPTION e_insert;

END;

Какие триггеры будут выполняться в первую очередь?

1) с меньшими номерами приоритетов

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

CREATE TRIGGER Req FOR REQUEST

BEFORE DELETE

AS

Выберите операторы для продолжения текста триггера:

2) declare variable r date;

begin

r = cast('now' as date);

if (old.executiondate < r) then

begin

exception art;

end

end

Как решается проблема последовательности выполнения триггеров, созданных для одной и той же таблицы, события и имеющих одну и ту же фазу?

1) Порядок выполнения таких триггеров задается с помощью предложения POSITION при определении триггера

Создать триггер, который запрещает вставку абонентов в таблицу NACHISLSUMMA, если начисление за 2007г.

CREATE TRIGGER Nach_tr FOR NACHISLSUMMA

AFTER INSERT

AS

Выберите операторы для продолжения текста триггера:

3) begin

if (new.nachislyear=2007) then

begin

exception e_nachisl;

end

end

4) begin

if (new.nachislyear=2007) then exception e_nachisl;

end

В каких пределах может меняться значение приоритета триггера?

3) от 0 до 32768

Какие контекстные переменные можно использовать в триггерах DML:

Выберите правильные варианты ответа

1) OLD

3) NEW

5) UPDATING,INSERTING,DELETING

Создан триггер с помощью следующей инструкции:

CREATE EXCEPTION e_delete 'Удаление запрещено';

SET TERM !! ;

CREATE TRIGGER exec_delete FOR executor

BEFORE DELETE AS

DECLARE VARIABLE exec_req INTEGER;

BEGIN FOR SELECT executorcd FROM request

WHERE executed=0 INTO :exec_req DO BEGIN

IF (OLD.executorcd=:exec_req) THEN EXCEPTION e_delete;

END

END!!

SET TERM ; !!

Данный триггер запрещает удаление:

2) исполнителей из справочника, имеющих непогашенные ремонтные заявки

Создан триггер, отвечающий за реализацию правила ссылочной целостности D:SN между таблицами Disrepair и Request.

create trigger td_disrepair for disrepair after delete

as

begin

Продолжите текст триггера.

2) pdate request

set

failurecd = null

where

failurecd = old.failurecd;

4) update request

set

request.failurecd = null

where

request.failurecd = old.failurecd;

end

Создан триггер с помощью следующей инструкции:

CREATE EXCEPTION e_update 'Обновление запрещено';

SET TERM !! ;

CREATE TRIGGER Nach_trigger FOR nachislsumma

BEFORE UPDATE AS DECLARE VARIABLE account VARCHAR(6);

BEGIN FOR SELECT accountcd FROM nachislsumma

GROUP BY accountcd HAVING AVG(nachislsum)>50

INTO :account DO BEGIN IF (account = old.accountcd) THEN EXCEPTION e_update;

END

END!!

SET TERM ; !!

Данный триггер запрещает изменение:

1) фактов начислений у тех абонентов, у которых средняя сумма всех начислений превышает 50 рублей

Соседние файлы в папке SQL