Программа модификации полей таблицы детали-поставщики, страница 3

14) Отслеживается удаление строк из таблицы изделий. Удаление изделия каскадируется в таблицу spj, в которой удаляются связанные с этим изделием поставки. Для тех поставщиков, для которых в результате удаления поставок суммарный объем поставок уменьшается более, чем на 50%, рейтинг поставщика в таблице s уменьшается на 25%.


15) №27. Select distinct n_post from spj as tmp where

(select distinct count(*) from spj where n_post=tmp.n_post and

n_det=tmp.n_det)=(select count(*) from j)

16) №17. Отслеживается модификация поля «количество» в spj. Если в результате выполнения операции модификации суммарный объем изменений полей «количество» некоторого поставщика по величине превосходит 50% объема поставок деталей, ранее выполненных этим же поставщиком, рейтинг увеличить на 25%. Задачу выполнить с использованием триггеров и процедур.

Create trigger vova update of n_izd on j referencing old as original new as newv

For each row execute procedure kolotolin(newv.n_izd,original.n_izd)

Create procedure kolotilin(newv.n_izd char(5), newv.name,n_izd char(5)) returning

If((select count(n_izd) from j where n_izd=newv.n_izd)=1) then

Update spj set n_izd=newv.n_izd        Where n_izd=original.n_izd

Else Update j set n_izd=original.n_izd where  n_izd=newv.n_izd End if

End procedure

17) №34. Select * from p where n_det in

(select distinct n_det from spj where n_izd in

(select n_izd from  j where town=’Лондон’))

group by n_post,n_det having count(n_izd)=

(select count(*) from j where town=’Лондон’))

информация о деталях, которые поставляются для всех изделий из лондона одним и тем же поставщиком.

Триггер: триггер срабатывает при модифицации n_izd в таблице j. Проверяются изменения № изделия. Номер, на который заменить старый, должен быть уникален. Если это так, то spj модифицируется каскадно, иначе модификация отменяется.

18) create trigger modif_s update on n_post on s old as old_npost

referencing new as new_npost

for each row(execute u(new_npost,old_npost)

create procedure u(npost char(5), spost char(5))

define c int;

let c=*select count(n_post) from S where n_post = npost)

if(c=1) then update spj set n_post=npost where n_post=spost

else update s set n_post=npost where n_post=npost

19) №12. Select n_izd from j jx where not exists

(select * from spj, spjy where spjy.n_izd=jx.n_izd)

and spjy.n_post!=”S2”)

выбрать номера изделий, чтобы в spj не содержалось таких строк, соответствующих этому изделию, что поставщик не равен S2.

Выбрать номера изделий для которых все детали поставляет только поставщик s2.

20) №13. Отслеживать выполнение операции модификации в j. Новое значение добавляется из списка городов таблиц s,p,j, иначе модификация отвергается. Выполнить задачу с использованием триггеров и процедур.

Create trigger test update of town on j

referencing old as town1 new as town2

For each row when(town2.town not in (select distinct town from s) and town2.town not in (select distinct town from p) and town2.town not in (select distinct town from j))

Update j set town=town1.town where town=town2.town

Execute procedure user_msg(town2.town)

Create procedure user_msg(t char(15))

Printf(“Sorry, there is no information about town %s in database”,t);

Emd procedure

21)     1) select distinct a.n_post from spj a,spj b,p c, p d where

c.n_det<>d.n_det and c.cvet<>d.cvet and a.n_det=c.n_det and b.n_det=d.n_det and a.n_post=b.n_post and a_rowid<>b.rowid

список поставщиков, поставляющих две разных детали разного цвета.

2) Отслеживаются удаления из таблицы деталей p. Если удаляемая деталь присутствует в таблице поставок spj, то соответствующие строки из таблицы поставок связываются с деталью с минимальным весом их этого же города, если таковой имеется, в противном случае – удаляется.

22)  create trigger H update on spj referencing old as original new as copy

update on spj referencing old as original referencing new as copy

for each row(when(select count(*) from s,copy

where s.n_post=copy.n_post=0)

or(select count(*) from p,copy where p.n_det=copy.n_det=0)

or(select count(*) from j,copy where j.n_izd=copy.n_izd=0))

(insert into spj, original values(original n_post,

original.n_det,original.n_izd,original.kol)

23)  Отслеживать удаление строк из р, удаление каскадируется в таблицу spj, в которой удаляются поставки. Для тех поставщиков, для которых в результате удаления поставок суммарный объем поставок уменьшается более чем на 50%, рейтинг поставщика уменьшается на 25%.

24)  Select distinct (k.n_izd) from spj k where not exists(