06 decembrie 2011

Triggeri in PL/SQL

Tabela student: {matricol, nume, grupa, medie, bursa}
1) creati un trigger care la fiecare inserare in tabela va popula bursa acelor stud cu medii > 7 , bursa = medie * 100; dupa acest trigger, insert 10 inreg in tabela; la inserare bursa=0
2) creati un nou trigger care se va asigura k la fiecare update al coloanei bursa , bursa nu se va da decat stud cu medii >= 7 si bursa e in intervalul 700..1000 (0 la medie<7, 700 la mai mic, 100 la mai mare); trigger pe toti studentii dintr-o grupa
3) folosind un view (proiectie a tabelei student), creati un trigger pe acest view care se executa la comanda delete si in momentul stergerii unui rand din view sa redistribuie bursa studentului respectiv celorlalti studenti din grupa sa; dar daca studentul este cel mai bun din grupa atunci stergerea este anulata;

1)
create table studenti (
matricol number(3),
nume varchar2(40),
grupa varchar2(5),
medie number(2),
bursa number(5)
);

CREATE OR REPLACE TRIGGER inserare
BEFORE INSERT ON studenti FOR EACH ROW
WHEN (new.bursa = 0 AND new.medie > 7)
BEGIN
:new.bursa := :new.medie * 100;
END;
/

insert into studenti values (100, 'ion', '341C1', 8, 0);
insert into studenti values (101, 'gheo', '341C1', 10, 0);
insert into studenti values (102, 'vasi', '341C1', 7, 0);
insert into studenti values (103, 'delia', '341C1', 5, 0);
insert into studenti values (104, 'diana', '341C1', 9, 0);

insert into studenti values (105, 'liviu', '341C5', 9, 0);
insert into studenti values (106, 'xena', '341C5', 8, 0);
insert into studenti values (107, 'raul', '341C5', 10, 0);
insert into studenti values (108, 'costin', '341C5', 9, 0);
insert into studenti values (109, 'daria', '341C5', 7, 0);

pentru celelalte exercitii rezolvate accesati (aici)

Niciun comentariu: