Adatbázisok szerver oldali programozása Labor, 2006.03.14.
A VIK Wikiből
(AdatbServerProgJegyzet20060314 szócikkből átirányítva)
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.
- Készíts egy anonim blokkot, ami sorra kiírja a kimenetre a páros számokat 1-től 100-ig, majd a páratlan számokat visszafele 100-tól 1-ig!
BEGIN FOR i IN 1..50 LOOP DBMS_OUTPUT.put_line(i*2); END LOOP; FOR i IN REVERSE 1..50 LOOP DBMS_OUTPUT.put_line(i*2-1); END LOOP; END;
- Készíts egy anonim blokkot, aminek van két paramétere, amiket futás előtt állíthatunk, az egyik a pilóta azonosítója, a másik egy évszám. A blokk belsejében írd ki (
DBMS_OUTPUT.put_line
), hogy az adott pilóta az adott szezonban milyen típusú pilótaként (Elsőszámú, Másodszámú, Teszt) szerepelt a Forma-1 világában. Amennyiben hibás paramétereket adtak meg, akkor azt írd ki, hogy nincs megfelelő adat.DECLARE pilota_id int := 103; evszam int := 2005; pilota_tipus int; BEGIN SELECT pilotatipus INTO pilota_tipus FROM csapat_pilota, csapat_szezon WHERE csapat_pilota.csapatszezonid = csapat_szezon.csapatszezonid AND csapat_pilota.pilotaid = pilota_id AND csapat_szezon.ev = evszam; CASE pilota_tipus WHEN '1' THEN DBMS_OUTPUT.put_line('Elsőszámú'); WHEN '2' THEN DBMS_OUTPUT.put_line('Másodszámú'); WHEN 'T' THEN DBMS_OUTPUT.put_line('Teszt'); ELSE DBMS_OUTPUT.put_line('Nincs megfelelő adat'); END CASE; END;
- Definiálj egy tízelemű egész számok tárolására alkalmas tömböt! Töltsd fel a tömb elemeit sorra páros számokkal! Ezek után írasd ki a tömb elemeit a kimenetre. A megoldáskor ne használd ki, hogy tudod a tömb méretét!
DECLARE TYPE tomb_tipus IS TABLE OF int; tomb tomb_tipus; i int; BEGIN tomb:=tomb_tipus(); FOR i IN 1..10 LOOP tomb.EXTEND; tomb(i):=i*2; END LOOP; i:=tomb.FIRST; LOOP EXIT WHEN i IS NULL; DBMS_OUTPUT.put_line(tomb(i)); i:=tomb.NEXT(i); END LOOP; END;
- Írj egy PL/SQL blokkot, ami kurzor használata nélkül az anyag tábla sorait kiírja a kimenetre!
DECLARE min_id int; max_id int; db int; anyag_sor anyag%ROWTYPE; BEGIN SELECT min(anyag_id) INTO min_id FROM anyag; SELECT max(anyag_id) INTO max_id FROM anyag; FOR i IN min_id..max_id LOOP SELECT count(anyag_id) INTO db FROM anyag WHERE anyag_id=i; IF db=1 THEN SELECT * into anyag_sor FROM anyag WHERE anyag_id=i; DBMS_OUTPUT.put_line(anyag_sor.anyag_id || ' ' || anyag_sor.anyag_nev); END IF; END LOOP; END;
- Oldd meg az előző feladatot explicit kurzor használatával! Hasonlítsa össze a két megoldást!
DECLARE CURSOR c IS SELECT anyag_id id, anyag_nev nev FROM anyag; BEGIN FOR rec IN c LOOP DBMS_OUTPUT.put_line(rec.id || ' ' || rec.nev); END LOOP; END;
- Oldd meg az előző feladatot implicit kurzort használó kurzor for ciklussal!
BEGIN FOR rec IN (SELECT anyag_id, anyag_nev FROM anyag) LOOP DBMS_OUTPUT.PUT_LINE(rec.anyag_id || ' ' || rec.anyag_nev); END LOOP; END;
- Listázd ki, hogy a gyümölcstorta milyen összetevőkből áll. A lista tartalmazza az alapanyagokat, amiket közvetlen a tortához kell felhasználni, és a félkész termékeket. Minden félkész termékek alatt egy kis listában jelenjen meg, hogy az adott félkész termék milyen alapanyagokból tevődik össze. Az alapanyag neve mellett a mennyiséget és a mértékegységet is írasd ki.
Minta:
A Csokitorta osszetevoi: porcukor(.02 kg) tejszinhab tejszin(4 dl) cukor(.1 kg) csoki krem kakao(750 g) tej(1 l) cukor(.5 kg) piskota tojas(6 db) liszt(.25 kg) cukor(.06 kg)
DECLARE termeknev termek.termek_nev%TYPE := 'Gyumolcstorta'; BEGIN DBMS_OUTPUT.put_line('A(z) ' || termeknev || ' összetevõi'); FOR rec IN ( SELECT anyag.anyag_nev, termek_anyag.ta_mennyiseg, egyseg.egyseg_nev FROM termek, termek_anyag, anyag, egyseg WHERE termek.termek_id = termek_anyag.ta_termekid AND anyag.anyag_id = termek_anyag.ta_anyagid AND egyseg.egyseg_id = anyag.anyag_egyseg AND termek.termek_nev = termeknev ) LOOP DBMS_OUTPUT.put_line(' ' || rec.anyag_nev || ' (' || rec.ta_mennyiseg || ' ' || rec.egyseg_nev || ')'); END LOOP; FOR rec IN ( SELECT felkesz.felkesz_id, felkesz.felkesz_nev FROM termek, termek_felkesz, felkesz WHERE termek.termek_id = termek_felkesz.tf_termekid AND felkesz.felkesz_id = termek_felkesz.tf_felkeszid AND termek.termek_nev = termeknev ) LOOP DBMS_OUTPUT.put_line(' ' || rec.felkesz_nev); FOR rec2 IN ( SELECT anyag.anyag_nev, felkesz_anyag.fa_mennyiseg, egyseg.egyseg_nev FROM felkesz, felkesz_anyag, anyag, egyseg WHERE felkesz.felkesz_id = felkesz_anyag.fa_felkeszid AND anyag.anyag_id = felkesz_anyag.fa_anyagid AND anyag.anyag_egyseg = egyseg.egyseg_id AND felkesz.felkesz_id = rec.felkesz_id ) LOOP DBMS_OUTPUT.put_line(' ' || rec2.anyag_nev || ' (' || rec2.fa_mennyiseg || ' ' || rec2.egyseg_nev || ')'); END LOOP; END LOOP; END;
- Hozz létre egy struktúrát, ami félkész termékek receptjeinek tárolására szolgál. Hozz létre egy tömböt az összes félkész termék receptjeinek a tárolására, és töltsd fel adatokkal. Ellenőrzésképpen írasd ki a tömb tartalmát a kimenetre!
-- Peti - 2006.03.14.