
Лёшка / Маркин Тест 3 / SQL / SQL(7)
.docСоздать триггер, запрещающий удаление неисправности из справочника, если имеются ремонтные заявки с данной неисправностью.
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 рублей