Adatbázisok szerver oldali programozása Labor, 2006.05.02.

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


<style> code.pre { white-space: pre; display: block; margin-top: 2px; margin-bottom: 2px; } li { line-height: 18px; } </style>


<< Labor, 2006.05.02. >>

T-SQL Kurzorok, Tárolt eljárások, Függvények

  1. Írj tárolt eljárást, ami lekérdezi a FUTAM_PILOTA tábla adatait! CREATE PROCEDURE list_futam_pilota AS SELECT * FROM futam_pilota GO
  2. Írj tárolt eljárást, aminek bemeneti paramétere egy helyszín pálya neve és a szezon, eredménye pedig az adott futam eredménye (pilóta neve, helyezése, ideje, teljesített körök száma)! Az eljárás kimeneti paramétere legyen az eredményhalmaz sorainak a száma! Írj batch szkriptet, ami meghívja az eljárást, a kimeneti paraméter értékét pedig kiírja a kimenetre! CREATE PROCEDURE eredmenylista @palyanev VARCHAR(50), @szezon INT, @sorokszama INT OUTPUT AS SELECT nev, helyezes, ido, teljesitettkorokszama FROM pilota, futam_pilota, futam, helyszin WHERE palya = @palyanev AND ev = @szezon AND futam_pilota.futamid = futam.futamid AND futam_pilota.pilotaid = pilota.pilotaid AND futam.helyszinid = helyszin.helyszinid ORDER BY ISNULL(helyezes, 9999) SET @sorokszama = @@ROWCOUNT GO DECLARE @sorokszama INT EXEC eredmenylista 'Melbourne', 2005, @sorokszama OUTPUT print @sorokszama
  3. Írj tárolt eljárást, ami a kimenetre listázza (print utasítás) a bemeneti paraméterben megkapott évben csapatonként a pilóták adatait. Az eljárás státusz információban jelölje, hogy a bemeneti paraméter alapján sikerült-e eredményt szolgáltatnia, azaz volt-e legalább egy csapat az adott szezonban! Az eljárást próbáld is ki! Az eredmény így nézzen ki: Renault (Flavio Briatore) Fernando Alonso (Elsoszamu pilota) Giancarlo Fisichella (Masodszamu pilota) Franck Montagny (Teszt pilota) McLaren Mercedes (Ron Dennis) Kimi Raikkönen (Elsoszamu pilota) Juan-Pablo Montoya (Masodszamu pilota) Alexander Wurz (Teszt pilota) Pedro de la Rosa (Teszt pilota) ... CREATE PROCEDURE csapattaglista @csapatszezonid INT AS DECLARE cp CURSOR FOR SELECT nev, CASE pilotatipus WHEN '1' THEN 'Elsőszámú pilóta' WHEN '2' THEN 'Másodszámú pilóta' WHEN 'T' THEN 'Teszt pilóta' END FROM pilota, csapat_pilota WHERE csapatszezonid = @csapatszezonid AND csapat_pilota.pilotaid = pilota.pilotaid ORDER BY pilotatipus, nev DECLARE @nev NVARCHAR(50), @pilotatipus VARCHAR(30) OPEN cp FETCH cp INTO @nev, @pilotatipus WHILE @@FETCH_STATUS=0 BEGIN print ' ' + @nev + ' (' + @pilotatipus + ')' FETCH cp INTO @nev, @pilotatipus END CLOSE cp DEALLOCATE cp GO CREATE PROCEDURE csapatlista @szezon INT AS DECLARE cc CURSOR FOR SELECT csapatszezonid, nev, fonoknev FROM csapat, csapat_szezon WHERE ev = @szezon AND csapat_szezon.csapatid = csapat.csapatid DECLARE @csapatszezonid INT, @nev NVARCHAR(50), @fonoknev NVARCHAR(50) OPEN cc FETCH cc INTO @csapatszezonid, @nev, @fonoknev WHILE @@FETCH_STATUS=0 BEGIN print @nev + ' (' + @fonoknev + ')' EXEC csapattaglista @csapatszezonid FETCH cc INTO @csapatszezonid, @nev, @fonoknev END CLOSE cc DEALLOCATE cc GO EXEC csapatlista 2005
  4. Írj függvényt, ami kiszámítja a bementként megkapott pilóta szintén bemenetként kapott évben elért eddigi pontszámát! Írj lekérdezést, ami minden pilóta neve mellé kiírja a pontszámát! CREATE FUNCTION pilotapontszam( @pilota NVARCHAR(50), @szezon INT ) RETURNS INT AS BEGIN DECLARE @pontszam INT SELECT @pontszam = SUM(CASE helyezes WHEN 1 THEN 10 WHEN 2 THEN 8 WHEN 3 THEN 6 WHEN 4 THEN 5 WHEN 5 THEN 4 WHEN 6 THEN 3 WHEN 7 THEN 2 WHEN 8 THEN 1 ELSE 0 END) FROM futam, futam_pilota, pilota WHERE ev = @szezon AND nev = @pilota AND futam_pilota.futamid = futam.futamid AND futam_pilota.pilotaid = pilota.pilotaid RETURN @pontszam END GO print dbo.pilotapontszam('Jarno Trulli', 2005)
  5. Írj egy tábla visszatérésű függvényt, aminek bemenete egy évszám, a tábla pedig tartalmazza az adott évben szerződésben álló pilóták addig elért pontjainak az összegét! A függvényt próbáld is ki!

-- Peti - 2006.05.02.