Chapter 11 Trigerat



Trigerat – “Sensoret”
  • Cfare jane triggerat
  • Si funksionon nje INSERT trigger (sensor per Insert)
  • Si funksionon nje DELETE trigger (sensor per delete)
  • Si funksionon nje update trigger (sensor per modifikim)


Cfare jane triggerat

  • Procedura qe ekzektuohen automatikisht nese ndodh nje kompande insert,update ose delete ne nje tabele
  • Triggerat dhe komanda qe i aktivizoi ato jane pjese e e te njejtit transaksion
  • Si punon nje Insert trigger
  • Kur aktivizoeht nje INSERT trigger,  rreshtat e reja shtohen edhe ne tabelen INSERTED
  • Tabela inserted eshte nje tabele llogjike qe mban nje kopje et rreshtave te saposhtuar. 
  • Triggeri mund te lexoje te dhenat ne tabelen inserted per te vendosur cfare duhet te beje

Si krijohet nje INSERT trigger


CREATE TRIGGER NewCats on Categories
AFTER INSERT AS
BEGIN
select CategoryId,CategoryName from inserted
END

Si funksionon nje DELETE trigger

  • Rreshtat e fshire vendosen ne nje tabele me emrin Deleted 
  • Tabela Deleted eshte nje tabele llogjike qe permban rreshtat e sapofshire
Si krijohet nje  DELETE Trigger

CREATE TRIGGER MosFshiKat on Categories
AFTER DELETE AS
BEGIN
ROLLBACK
END

Trigeri i mesiperm nuk lejon fshirjen ne tabelen categories

Si funksionon nje UPDATE trigger

  • Sensori per modifikim bazohet ne te dy tabelat llogjike:
  • Tabela DELETED ruan versionin e rreshtave te modifikuar para modifkimit
  • Tabela INSERTED ruan versionin e rreshtave te modifikuar pas modifkimit

Si krijohet nje  UPDATE Trigger

CREATE TRIGGER AfishoKatMod on Categories
AFTER UPDATE AS
BEGIN
SELECT CategoryId, CategoryName from Categories 
END

Ushtrim

Ndertoni nje trigger i cili nuk lejon modifikimin e cmimit te produktit ( tabela products)
Zgjidhje

-- supozojme se modifikohet vetem nje rresht

create trigger fixed_price ON Products
AFTER UPDATE AS
BEGIN
Declare @oldprice as float
Declare @newprice as float
select @oldprice=unitprice from deleted 
select @newprice=unitprice from inserted
if(@oldprice<>@newprice)
begin
rollback
print 'nuk mund te modifikohet cmimi'
end
END

--supozojme se modofikohen disa rreshta

create trigger fixed_price ON Products
AFTER UPDATE AS
BEGIN
if exists
(
select * from inserted i join deleted d 
on i.product_id=d.product_id
where i.unitprice<>d.unitprice
)
begin
rollback
print 'nuk mund te modifikohet cmimi'
end
END




Detyre  Shtepie
Rikujtese ushtrimi me audit kategorise
Ndertoni nje triger i cili ruan punonjit e fshire:
current_user kthen user korrent ndersa getdate() kohen korrente