Sunteți pe pagina 1din 11

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatic i Tehnologii Informaionale

Raport
Lucrare de laborator nr. 9
la disciplina: Baze de date i cunotine
tema: Crearea i utilizarea declanatoarelor

A verificat: lector superior Bagrin Veronica


A efectuat: st. gr. TI-133 Rotari Ana

Chiinu 2016
Coninut
Sarcina 1............................................................................................................................................4

Sarcina 2............................................................................................................................................4

Sarcina 3............................................................................................................................................6

Sarcina 4............................................................................................................................................8

Sarcina 5..........................................................................................................................................10

Concluzii..........................................................................................................................................11

2
Sarcina lucrrii

1. S se modifice declanatorul inregistrare_noua n aa fel nct n cazul actualizrii adresei


furnizorului s apar mesajul de informare, care va afia numele furnizorului, adresa veche i
adresa nou.

2. S se creeze declanatoarele care ar insera corect (consecutiv) datele n baza de date


calculatoare i ar permite evitarea erorilor la nivelul cheilor externe.

3. S se creeze un declanator care ar interzice tergerea modelelor produselor productorului


A, produselor care cost mai mult de 300, precum i editarea valorilor cmpului Cod. Se va
afia un mesaj de avertizare n cazul tentativei de a nclca constrngerea.

4. S se creeze un declanator DDL care ar interzice modificarea coloanei Model n tabelele bazei
de date calculatoare cu afiarea mesajului respectiv.

5. S se creeze un declanator DDL care ar interzice modificarea schemei bazei de date n afara
orelor de lucru.

6. S se creeze un declanator DDL care, la modificarea proprietile coloanei Pret dintr-un tabel,
ar face schimbri asemntoare n mod automat n restul tabelelor.

3
Sarcina 1
alter trigger inregistrare_noua on furnizor
after update
as set nocount on
if(update(Adresa))
select 'Furnizorul '+ RTRIM(upper(inserted.Nume))+
'are adresa noua -'+upper(inserted.Adresa)+' . ' +
'Adresa veche a furnizorului a fost -' + RTRIM(upper(deleted.Adresa))+' .'
from inserted inner join deleted
on inserted.Nume=deleted.Nume

Sarcina 2

pc_uri:

create trigger insdataPC on pc_uri


after insert
as
if not exists (select inserted.model from inserted where not inserted.model in (select model from
produse))

print 'Toate datele au fost inserate cu succes. '

else print 'Din cauza constringerii referentiale, nu este posibila inserarea completa a datelor.
Pentru evitarea erorilor la nivel de cheie externa, tuplurile inadmisibile au fost sterse.'
delete from pc_uri where not pc_uri.model in (select model from produse)

drop trigger insdataPC

insert pc_uri (id,model,viteza, ram,hd,cd,pret)


values (1,1232,500,64,5,'12x',600),
(2,1121,750,128,14,'40x',850),
(3,1233,500,64,5,'12x',600),
(4,1121,600,128,14,'42x',850),
(5,1121,600,128,8,'40x',850),
(6,1233,750,128,20,'50x',950),
(7,1232,500,32,10,'12x',400),
(8,1232,450,64,8,'24x',350),
(9,1232,750,32,10,'24x',350),
(10,1260,500,32,10,'12x',350),
(11,1233,900,128,40,'40x',980),
(12,4444,900,128,40,'40x',980),
(13,5555,900,128,40,'40x',980);

select * from pc_uri


delete from pc_uri where model>0

laptop_uri:

create trigger insdataLaptop_uri on laptop_uri


after insert
as
if not exists (select inserted.model from inserted where not inserted.model in (select model from
produse))

print 'Toate datele au fost inserate cu succes. '

4
else print 'Din cauza constringerii referentiale, nu este posibila inserarea completa a datelor.
Pentru evitarea erorilor la nivel de cheie externa, tuplurile inadmisibile au fost sterse.'
delete from laptop_uri where not laptop_uri.model in (select model from produse)

drop trigger insdataLaptop_uri

insert laptop_uri (id,model,viteza,ram,hd,pret,ecran)


values (1,1298,350,32,4,700,11),
(2,1321,500,64,8,970,12),
(3,1750,750,128,12,1200,14),
(4,1298,600,64,10,1050,15),
(5,1752,750,128,10,1150,14),
(6,1298,450,64,10,950,12),
(7,1111,450,64,10,950,12),
(8,2222,450,64,10,950,12),
(9,3333,450,64,10,950,12);

select * from laptop_uri


delete from laptop_uri where model>0

imprimante:

create trigger insdataImprimante on imprimante


after insert
as
if not exists (select inserted.model from inserted where not inserted.model in (select model from
produse))

print 'Toate datele au fost inserate cu succes. '

else print 'Din cauza constringerii referentiale, nu este posibila inserarea completa a datelor.
Pentru evitarea erorilor la nivel de cheie externa, tuplurile inadmisibile au fost sterse.'
delete from imprimante where not imprimante.model in (select model from produse)

drop trigger insdataImprimante

insert imprimante (id,model,color,tip, pret)


values (1,1276,'nu','Laser',400),
(2,1433,'da','Jet',270),
(3,1434,'da','Jet',290),
(4,1401,'nu','Matrix',150),
(5,1408,'nu','Matrix',270),
(6,1288,'nu','Laser',400),
(7,1111,'nu','Laser',400),
(8,2222,'nu','Laser',400),
(9,3333,'nu','Laser',400),
(10,4444,'nu','Laser',400);

select * from imprimante


delete from imprimante where model>0

5
Sarcina 3

Produse:

create trigger sarcina3 on produse


FOR delete
as
if (exists (select 1
from deleted d
where d.producator = 'A' and
(exists (select 1 from pc_uri p where p.model = d.model and p.pret > 300) or
exists (select 1 from laptop_uri l where l.model = d.model and l.pret > 300) or
exists (select 1 from imprimante p where p.model = d.model and p.pret > 300)
)
)
)
begin
raiserror ( 'Acest model nu poate fi sters, deoarece pretul acestuia depaseste 300 si producatorul
acestuia este A',2,1)
rollback transaction;
end
else print 'Modelul acestui producator va fi sters'

drop trigger sarcina3

delete from produse where model='1408';


select * from produse;

Pc_uri:

create trigger sarcina3PC on pc_uri


FOR delete
as
if (exists (select 1
from deleted d
where d.pret>300 and(exists(select 1 from produse where
d.model=produse.model and produse.producator='A'))))
begin
raiserror ( 'Acest model nu poate fi sters, deoarece pretul acestuia depaseste 300 si producatorul
acestuia este A',2,1)
rollback transaction;
end
else print 'Modelul acestui producator va fi sters'

drop trigger sarcina3PC

delete from pc_uri where model='1233'


delete from pc_uri where model='1260';
select * from pc_uri;

Laptop_uri:

create trigger sarcina3Laptop on laptop_uri


FOR delete
as
if (exists (select 1
from deleted d
where d.pret>300 and(exists(select 1 from produse where
d.model=produse.model and produse.producator='A'))))
begin

6
raiserror ( 'Acest model nu poate fi sters, deoarece pretul acestuia depaseste 300 si producatorul
acestuia este A',2,1)
rollback transaction;
end
else print 'Modelul acestui producator va fi sters'

drop trigger sarcina3Laptop

select * from laptop_uri

delete from laptop_uri where model='1298'


delete from laptop_uri where model='1752'
delete from laptop_uri where model='1321'

select * from laptop_uri inner join produse on laptop_uri.model=produse.model and


produse.producator='A'

Imprimante:

create trigger sarcina3Imprimante on imprimante


FOR delete
as
if (exists (select 1
from deleted d
where d.pret>300 and(exists(select 1 from produse where
d.model=produse.model and produse.producator='A'))))
begin
raiserror ( 'Acest model nu poate fi sters, deoarece pretul acestuia depaseste 300 si producatorul
acestuia este A',2,1)
rollback transaction;
end
else print 'Modelul acestui producator va fi sters'

drop trigger sarcina3Imprimante

select * from imprimante

delete from imprimante where model='1276'


delete from imprimante where model='1401'
delete from imprimante where model='1408'

select * from imprimante inner join produse on imprimante.model=produse.model and


produse.producator='A' and pret>300

Editarea cmpului id:

create trigger editId on pc_uri


instead of update,insert
as

if update(id)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update pc_uri set id=33 where id=10


insert into pc_uri (id) values(44)

select * from pc_uri

7
create trigger editIdL on laptop_uri
instead of update,insert
as

if update(id)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update laptop_uri set id=33 where id=10


insert into laptop_uri (id) values(44)

select * from laptop_uri

create trigger editIdI on imprimante


instead of update,insert
as

if update(id)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update imprimante set id=33 where id=10


insert into imprimante (id) values(44)

select * from imprimante

Sarcina 4

Pc_uri:

create trigger editModel on pc_uri


for update
as

if update(Model)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update pc_uri set model='9999' where model='1232'


select * from pc_uri
drop trigger editModel

Laptop_uri:

create trigger editLModel on laptop_uri


for update
as

8
if update(Model)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update laptop_uri set model='9999' where model='1298'


select * from laptop_uri
drop trigger editLModel

Imprimante:

create trigger editIModel on imprimante


for update
as

if update(Model)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update imprimante set model='9999' where model='1276'


select * from imprimante

Produse:

create trigger editPModel on produse


for update
as

if update(Model)
begin
print 'Nu puteti modifica valorile acestui atribut'
rollback transaction
end
else print 'Modificarile au fost efectuate cu succes'

update produse set model='9999' where model='1276'


select * from produse

9
Sarcina 5
if exists (select * from sys.triggers where parent_class=0 and name='sarcina_5') drop trigger sarcina_5
on database

create trigger sarcina_5


on database
for DROP_TABLE, ALTER_TABLE, CREATE_TABLE--, DROP_DATABASE, ALTER_DATABASE
as
if((select convert(time, getdate())) not between '9:00' and '18:00')
begin
print 'Modificarea schemei bazei de date este interzisa in afara orelor de lucru.'
SELECT EVENTDATA().value
('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
rollback transaction;
end
else
print 'Modificarile au fost efectuate.'

alter table produse alter column producator varchar(2)


alter table produse alter column producator char(1)

10
Concluzii

Gestionarea i executarea declanatoarelor permite implementarea aplicaiilor de baze de date care


reprezint business rules, cuprinznd la fel i constrngerile predefinite. Aceste reguli sau restric ii in
n mod inerent de structura bazei de date i sunt induse de semantica unei colecii de date, fiind
comune tuturor aplicaiilor care folosesc aceast baz de date i independente de fiecare aplica ie n
parte.

11

S-ar putea să vă placă și

  • Lab#1 PR
    Lab#1 PR
    Document5 pagini
    Lab#1 PR
    Alexandru Dumbrava
    Încă nu există evaluări
  • SI Examen
    SI Examen
    Document13 pagini
    SI Examen
    Alexandru Dumbrava
    Încă nu există evaluări
  • Plan de Afaceri 2.0
    Plan de Afaceri 2.0
    Document7 pagini
    Plan de Afaceri 2.0
    Alexandru Dumbrava
    Încă nu există evaluări
  • BDC Lab8
    BDC Lab8
    Document36 pagini
    BDC Lab8
    Tudor Munteanu
    Încă nu există evaluări
  • Lab 3 BDC
    Lab 3 BDC
    Document9 pagini
    Lab 3 BDC
    Alexandru Dumbrava
    Încă nu există evaluări
  • RC Lab1.1
    RC Lab1.1
    Document17 pagini
    RC Lab1.1
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lucrarea de Curs
    Lucrarea de Curs
    Document26 pagini
    Lucrarea de Curs
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lucrare de Laborator Nr1 Sisteme Multimedia
    Lucrare de Laborator Nr1 Sisteme Multimedia
    Document11 pagini
    Lucrare de Laborator Nr1 Sisteme Multimedia
    Ion Stratan
    Încă nu există evaluări
  • ACSO Raspuns 1 25
    ACSO Raspuns 1 25
    Document6 pagini
    ACSO Raspuns 1 25
    Alexandru Dumbrava
    Încă nu există evaluări
  • Elect Lab1
    Elect Lab1
    Document6 pagini
    Elect Lab1
    Alexandru Fiodor
    Încă nu există evaluări
  • Elect Lab1
    Elect Lab1
    Document6 pagini
    Elect Lab1
    Alexandru Kirika
    Încă nu există evaluări
  • Lab 1 PW
    Lab 1 PW
    Document4 pagini
    Lab 1 PW
    Alexandru Dumbrava
    Încă nu există evaluări
  • ACSO Raspun 51 75
    ACSO Raspun 51 75
    Document10 pagini
    ACSO Raspun 51 75
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 6 AC
    Laborator 6 AC
    Document6 pagini
    Laborator 6 AC
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lab4 Matlab Utm v10
    Lab4 Matlab Utm v10
    Document4 pagini
    Lab4 Matlab Utm v10
    Grigore043
    Încă nu există evaluări
  • Lab1 Electronica
    Lab1 Electronica
    Document6 pagini
    Lab1 Electronica
    Alexandru Dumbrava
    Încă nu există evaluări
  • Raspunsuri Electronica
    Raspunsuri Electronica
    Document6 pagini
    Raspunsuri Electronica
    Alexandru Dumbrava
    100% (1)
  • Laborator 3
    Laborator 3
    Document8 pagini
    Laborator 3
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator MD 5-6
    Laborator MD 5-6
    Document11 pagini
    Laborator MD 5-6
    Alexandru Dumbrava
    100% (1)
  • Laboratorul Nr.1 LFPC
    Laboratorul Nr.1 LFPC
    Document6 pagini
    Laboratorul Nr.1 LFPC
    Alexandru Dumbrava
    Încă nu există evaluări
  • GC3 Laborotor
    GC3 Laborotor
    Document4 pagini
    GC3 Laborotor
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 4 AC
    Laborator 4 AC
    Document14 pagini
    Laborator 4 AC
    Alexandru Dumbrava
    100% (1)
  • Mecanica Laborator 1
    Mecanica Laborator 1
    Document7 pagini
    Mecanica Laborator 1
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lab1 Metode Numerice
    Lab1 Metode Numerice
    Document12 pagini
    Lab1 Metode Numerice
    Alexandru Dumbrava
    Încă nu există evaluări
  • Electronica Lab4
    Electronica Lab4
    Document6 pagini
    Electronica Lab4
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laboratorul 3
    Laboratorul 3
    Document15 pagini
    Laboratorul 3
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laboratorul 3 Matlab Utm Varianta 10
    Laboratorul 3 Matlab Utm Varianta 10
    Document9 pagini
    Laboratorul 3 Matlab Utm Varianta 10
    Fernando Epic Costa
    Încă nu există evaluări
  • Raport MDLab 2
    Raport MDLab 2
    Document8 pagini
    Raport MDLab 2
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document8 pagini
    Laborator 3
    Alexandru Dumbrava
    Încă nu există evaluări