Feladat 1: Kategória nézet és adatbeszúrás¶
Nézet létrehozása¶
Hozz létre egy nézetet KategoriaSzulovel néven a Kategoria tábla kényelmesebb használatához. A nézetben két oszlop legyen: a kategória megnevezése, és a szülőkategória megnevezése, amennyiben létezik, vagy null.
- Nyiss egy új Query ablakot. Ügyelj rá, hogy a jó adatbázis legyen kiválasztva. Hozd létre a nézetet az alábbi utasítás lefuttatásával.
create view KategoriaSzulovel
as
select k.Nev KategoriaNev, sz.Nev SzuloKategoriaNev
from Kategoria k
left outer join Kategoria sz on k.SzuloKategoria = sz.ID
- Próbáld ki a nézetet: kérdezd le a nézet tartalmát!

Beszúrás a nézeten keresztül¶
Készíts triggert KategoriaSzulovelBeszur néven, ami lehetővé teszi új kategória beszúrását az előbb létrehozott nézeten keresztül (tehát a kategória nevét és a szülőkategória nevét megadva). Amennyiben a szülő kategória nem létezik, dobj hibát, és ne vedd fel az adatot a táblába.
A megoldásban egy instead of típusú triggerre lesz szükségünk, mert ez ad lehetőséget a nézeten keresztül történő adatbeszúrásra. A trigger vázát láthatod alább.
create trigger KategoriaSzulovelBeszur -- a trigger neve
on KategoriaSzulovel -- a nézet neve
instead of insert -- beszúrás helyetti trigger
as
begin
declare @ujnev nvarchar(255) -- a kapott adatok
declare @szulonev nvarchar(255)
-- kurzort használunk, mert az inserted implicit táblában
-- több elem is lehet, és mi egyesével dolgozzuk fel
declare ic cursor for select * from inserted
open ic
-- standard kurzor használat
fetch next from ic into @ujnev, @szulonev
while @@FETCH_STATUS = 0
begin
-- ide jön a változóban elérhető adatok ellenőrzése
-- ha hiba van, akkor dobjunk hibát
-- ha minden rendben van, akkor jöhet beszúrás
fetch next from ic into @ujnev, @szulonev
end
close ic -- kurzor lezárása és felszabadítása
deallocate ic
end
-
Egészítsd ki a trigger vázat a ciklusban.
-
Ha érkezik szülő kategória név, ellenőrizd, hogy létezik-e kategória olyan névvel, mint ami a
@szulonevváltozóban van. -
Ha nincs ilyen, akkor dobj hibát, amivel leáll a trigger futása.
-
Ha minden rendben van, akkor szúrd be az új adatokat a
Kategoriatáblába (ne a nézetbe, hiszen a nézet nem írható, pont ezért készül a trigger). -
Próbáld ki, jól működik-e a trigger! Írj egy olyan beszúró utasítást, amely sikeresen felvesz egy új elemet, és egy olyan teszt utasítást, amely során nem sikerül a beszúrás.
A helyes és helytelen viselkedéshez feltételezheted, hogy az adatbázis a kiinduló állapotban van: olyan kategória rekordok léteznek csupán, amelyeket a létrehozó script beszúrt. (A két teszt ne épüljön egymásra! Mindkettő az elvárt eredményt adja attól függetlenül, hogy a másik lefutott-e már!)
Érdemes olyan tesz adatokat választani, amiben nincs ékezet! Különben problémákat okozhat az sql fájl kódolásának helytelen beállítása. Hogy ezt elkerüljük, használható például a LEGO, mint szülő kategória név.
Következő feladat¶
Folytasd a következő feladattal.