Valaszthato AdatbServerProgJegyzet20060321
A VIK Wikiből
Ez az oldal a korábbi SCH wikiről lett áthozva.
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> pre { margin-top: 2px; margin-bottom: 2px; } li { line-height: 18px; } </style>
- Készíts egy tárolt eljárást, aminek bemeneti paramétere egy pilóta neve, két kimeneti paramétere pedig a pilóta magassága és súlya! Az eljárást próbáld ki SQL Windowból, a kimeneti paramétereket a DBMS_OUTPUT.PUT_LINE metódussal írasd ki a
kimenetre!
- Program Window:
CREATE OR REPLACE PROCEDURE pilotaparams(pnev IN VARCHAR2, magassag OUT INT, suly OUT INT) IS BEGIN SELECT pilota.magassag, pilota.suly INTO magassag, suly FROM pilota WHERE pilota.nev = pnev; END pilotaparams;
- SQL Window:
DECLARE magassag INT; suly INT; BEGIN pilotaparams('Cristijan Albers', magassag, suly); DBMS_OUTPUT.PUT_LINE('Magassag: ' || magassag || ' Suly: ' || suly); END;
- Program Window:
- Próbáld ki az előző feladatban megoldott eljárás hívását a Test Window-ból! A Test Window egy olyan környezet, ahol lehetőség van környezeti változókat használni a
blokkon belül. Ha környezeti változóban adjuk meg a bemeneti és a két kimeneti
paramétert, akkor az eredményt az ablak alsó felében láthatjuk, nem kell nekünk extra
kiíratni a kimenetre. A környezeti változók deklarálása is a Test Window alsó
ablakában lehetséges, ahol meg kell adni a változó nevét és típusát, ha bemeneti
paraméter, akkor az értékét is. A változóra a blokkon belül a kettőspont változónévvel lehet hivatkozni. (Pl. a változó neve legyen pilotanev, akkor a blokkon belül =:pilotanev= kifejezéssel hivatkozunk rá.)
BEGIN pilotaparams(:pilotanev, magassag, suly); END;
Test Window alján:
Variable Type Value pilotanev String Cristijan Albers magassag Integer suly Integer F8-ra kitölti a hiányzó értékeket.
- Egészítsd ki az előző feladatot hibakezeléssel is. Amennyiben nem létezik a
bemenetként megadott pilóta, akkor a kimeneti értékek -1 legyenek!
CREATE OR REPLACE PROCEDURE pilotaparams(pnev IN VARCHAR2, magassag OUT INT, suly OUT INT) IS BEGIN SELECT pilota.magassag, pilota.suly INTO magassag, suly FROM pilota WHERE pilota.nev = pnev; EXCEPTION WHEN NO_DATA_FOUND THEN magassag := -1; suly := -1; END pilotaparams;
- Készíts egy tárolt eljárást, aminek bemeneti paramétere egy csapat neve és egy
évszám! Az eljárás listázza ki a kimenetre az adott csapat adott évben szerződtetett
pilótáit!
CREATE OR REPLACE PROCEDURE csapat_szezon_pilotak(csnev IN VARCHAR2, szev IN int) IS BEGIN FOR rec IN ( SELECT pilota.nev FROM csapat, csapat_pilota, csapat_szezon, pilota WHERE csapat.csapatid = csapat_szezon.csapatid AND csapat_szezon.csapatszezonid = csapat_pilota.csapatszezonid AND pilota.pilotaid = csapat_pilota.pilotaid AND csapat.nev = csnev AND csapat_szezon.ev = szev ) LOOP DBMS_OUTPUT.PUT_LINE(rec.nev); END LOOP; END csapat_szezon_pilotak;
- Írj egy olyan eljárást, aminek az egyetlen bemenő paramétere az évszám, és az adott szezonban létező csapatok pilótáit listázza ki a kimenetre szépen formázva (a csapat nevek alatt bentebb vannak felsorolva a pilóták nevei)!
CREATE OR REPLACE PROCEDURE szezon_pilotak(szev IN int) IS BEGIN FOR rec IN ( SELECT csapat.csapatid, csapat.nev FROM csapat, csapat_szezon WHERE csapat.csapatid = csapat_szezon.csapatid AND csapat_szezon.ev = szev ) LOOP DBMS_OUTPUT.PUT_LINE(rec.nev); FOR rec2 IN ( SELECT pilota.nev FROM csapat_pilota, csapat_szezon, pilota WHERE csapat_szezon.csapatszezonid = csapat_pilota.csapatszezonid AND pilota.pilotaid = csapat_pilota.pilotaid AND rec.csapatid = csapat_szezon.csapatid AND csapat_szezon.ev = szev ) LOOP DBMS_OUTPUT.PUT_LINE(' ' || rec2.nev); END LOOP; END LOOP; END szezon_pilotak;
- Írj egy tárolt eljárást, aminek segítségével egy csapatot és egy pilótát tudunk egy szezonban összerendelni. Az eljárás bemenő paramétere a csapat neve, a pilóta neve, a szezon évszáma és a pilóta típusa legyen. Használd a hibakezelési lehetőségeket az alábbi szituációkra, és mindegyikről külön küldj hibaüzenetet:
- Nem létezik az adott nevő csapat vagy az adott évben nem indult.
- Nem létezik az adott pilóta.
- Nincs ilyen szezon definiálva az adatbázisban.
- Már tagja az adott pilóta az adott csapatnak az adott évben.
- Ha a pilóta típusa 1 vagy 2 és ilyen már létezik, akkor vegye fel másik számúnak, ha az még nem foglalt, vagy ha már mindkét pozíció foglalt, akkor teszt pilótának, és küldjön erről üzenetet.
CREATE OR REPLACE PROCEDURE szezon_pilotak( csapatnev VARCHAR2; pilotanev VARCHAR2; szezonev INT; pilotatipus CHAR; ) IS BEGIN -- to be continued... END;
- Írj függvényt, ami a bemeneteként kapott FLOAT típusú számot szöveges formátummá konvertálja a következők szerint: óra:perc:másodperc.ezredmásodperc!
- Írj lekérdezést, ami az előző feladatban megírt függvény segítségével kilistázza a 2005-ös Ausztrál Nagydíj eredményét (pilóta név, helyezés, idő)!
- Írj lekérdezést, ami az előző feladatban megírt lekérdezést egészíti ki olyan módon, hogy egy újabb oszlopban az adott időeredmény és az első helyezett eredményének a különbsége is megjelenik! Az eredményedet ellenőrizd le a http://www.formula1.com oldalon található táblázattal! Az eredmény így nézzen ki: TODO: táblázat
- Írj egy függvényt, ami a tanév szemesztereinek következőképpen megadott kódját szöveges, emberek számára egyértelmően értelmezhetővé konvertálja! A szemeszterkód egy ötjegyő szám, aminek első négy jegye az évet jelenti, míg az ötödik számjegye az év félévét jelenti. Például a 2002 év őszi félévét a 20022 jelöli, míg a 2003 tavaszi félévet a 20031 kód jelöli. Megjelenítéskor az első esetben „2002/2003 I. félév” a második esetben pedig „2002/2003 II. félév” szöveget szeretnénk látni. A megírt függvényt próbáld ki néhány minta bemenettel!
- Az előző feladatban megírt függvény segítségével listázd ki a tanár-diák adatbázis =SEMESTER= tábla adatait!
-- Peti - 2006.03.21.