[ idProof @ 07.07.2011. 14:09 ] @
Imam tabelu NastavniPlanovi. U okviru tabele se nalaze dva obelezja "Obavezan" i "izborni" i odnose se na predmete. Posto jedna predmet u isto vreme ne moze da bude "obavezan" i "izborni", ja sam pokusao da kreiram INSTEAD OF okidac. Pre unosa u tabelu Nastavni Planovi, procedura treba da proveri da li je unesena vrednost za "obavezan" i "izborni" ista. Ako je ista, okidac ce da OPALI i da posalje poruku o gresci. Dakle, vrednosti za obelezja "obavezan" i "izborni" bi bile 1 ili 0. Vrednost 1 kazuje da je predmet obavezan ili izborni, a 0 da nije. NastavniPlanovi (necu sve kolone navesti, samo one obavezne) ( rbrNastavniPlanovi char(5) primary key not null, rbrSavke char(15) Primary key not null, nacinPolaganja char(45) not null, ESPB INT, obavezan bit, izborni bit ) Tabela ima kompozitni primarni kljuc, sastavljen od obelezja rbrNastavniPlanovi i rbrSavke , stim da rbrNastavniPlanovi referencira primarni kljuc druge tabele. Nad ovom tabelom je kreiran pogled imenovan sa "vw_Nastavni_Planovist". Triger: ALTER TRIGGER insteadof_nastavniPlanovist ON vw_Nastavni_Planovist INSTEAD OF INSERT AS BEGIN DECLARE @izb bit, @obav bit SELECT @obav=i.Obavezan, @izb=i.Izborni FROM NastavniPlanoviSt st JOIN inserted i ON i.RbrNastavnogPl=st.RbrNastavnogPl IF (@obav!=@izb) BEGIN INSERT INTO nastavniPlanoviSt(RbrNastavnogPl, RbrStavke,SifPredmeta,NacinPolaganja,ESPB,Obavezan,Izborni) SELECT i.RbrNastavnogPl,i.RbrStavke,i.SifPredmeta,i.NacinPolaganja,i.ESPB,@obav, @izb FROM inserted i JOIN NastavniPlanoviSt st ON st.RbrNastavnogPl=i.RbrNastavnogPl END ELSE Raiserror ('Greska, uneli ste jednake verdnosti za kolone Obavezan i Izborni',10,1) END Pokusaj unosa vrednosti: INSERT INTO vw_Nastavni_Planovist( RbrNastavnogPl, RbrStavke, SifPredmeta, NacinPolaganja, ESPB, Obavezan, Izborni) VALUSE (59, 131, 'MDM050', 'UP', 2,0, 0) Poruka: Uneli ste jednake verdnosti za kolone Obavezan i Izborni (1 row(s) affected) --Drugi pokusaj unosa, sa promenom vrednosti za obelezje "Obavezan" Pokusaj unosa vrednosti: INSERT INTO vw_Nastavni_Planovist( RbrNastavnogPl, RbrStavke, SifPredmeta, NacinPolaganja, ESPB, Obavezan, Izborni) VALUSE (59, 131, 'MDM050', 'UP', 2,1, 0) Poruka o gresci: Msg 2627, Level 14, State 1, Procedure insteadof_nastavniPlanovist, Line 14 Violation of PRIMARY KEY constraint 'PK_NastavniPlanoviSt'. Cannot insert duplicate key in object 'dbo.NastavniPlanoviSt'. The statement has been terminated. Naravno, nisam uneo dupli kljuc. |