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