PL/SQL gyakorlás Kalmár György.

Slides:



Advertisements
Hasonló előadás
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Advertisements

PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
PL/SQL I. ADATBÁZIS ALAPÚ RENDSZEREK.  PL/SQL = Procedural Language/SQL  utasítást ; zárja le  PL/SQL blokk lezárása: /  kis- és nagybetű egyenértékű.
ORACLE ORDBMS adminisztrációs feladatok 6. rész dr. Kovács László 2004.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Adatbázis rendszerek II
1 VIII. VASÚTI PÁLYÁK TERVEZÉSÉTŐL A KIVITELEZÉSIG VASÚTI PÁLYÁS MÉRNÖKTOVÁBBKÉPZŐ Magyar Mérnöki Kamara Budapest, EU támogatású projektek.
Vetésforgó tervezése és kivitelezése. Vetésforgó Vetésterv növényi sorrend kialakításához őszi búza250 ha őszi árpa50 ha lucerna ebből új telepítés 300.
John Sheridan BVetMed CVPM DMS MRCVS A Te praxisod, a Te karriered, a Te életed – gond van?
BME VEGYÉSZMÉRNÖKI ÉS BIOMÉRNÖKI KAR
„A helyi innovációk keletkezése, terjedése és rendszerformáló hatása az oktatási ágazatban” (K ) Az „Innova” kutatás „A helyi innovációk keletkezése,
Internet tudományos használata
Gazdasági informatika - bevezető
Fájlkezelés.
Adatbázis rendszerek II.
Adottságok tényszerű megfogalmazása 4.6. előadás
Valószínűségi kísérletek
Merre tovább magyar mezőgazdaság?
Adatbázis normalizálás
Triggerek gyakorlás.
Programstruktúrák.
Idegen kulcsok Lokális és globális megszorítások Triggerek
Scilab programozás alapjai
Bevezető az EndNote X6-ba
videós team Team vezetője: Tariné Péter Judit Tagok:
ACCESS ALAPOK Alapfogalmak
Magyar Tudományos Művek Tára
Adatbázisok 8. előadás Tikk Domonkos.
PHP - függvények.
LabVIEW bevezetéstől a feszültség-áram karakterisztikáig Vida Andrea
Beszélj hangosan és érthetően!
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
Adatbázisok SQL.
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata 2015 Skultéti Attila
Kovács Gergely Péter Egyszerű lekérdezések
Triggerek Kalmár György.
13. Gyakorlat Dr. Pauler Gábor, Egyetemi Docens
Adatbázis-kezelés (PL/SQL)
Szerkesztőléc Aktív cella oszlopmutató sormutató munkalap munkafüzet.
Kvantitatív módszerek
PHP-SQL adatbáziskezelő parancsai
adatbázis alapú rendszerek
Gazdaságstatisztika Korreláció- és regressziószámítás II.
PL/SQL alapok Adatbázis-kezelés.
Adatbázis-kezelés (PL/SQL)
2. Bevezetés A programozásba
☺ Programozási környezetek Validátorok Fazekas Judit PTI 2010.
Közigazgatási alapvizsga a Probono rendszerben
Fazekas Ágnes – Halász Gábor-Horváth László
Számítógépes Hálózatok
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata november Skultéti Attila
Tilk Bence Konzulens: Dr. Horváth Gábor
Kalickás forgórészű aszinkronmotor csillag-delta indítása
Vasas Lívia, PhD 2018 Web of Science Vasas Lívia, PhD 2018.
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Dr. Varga Beatrix egy. docens
Környezeti Kontrolling
Oracle Adatbázisok kezelése c#-ban
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
A Lineáris Keresés Buktatói
SZAKKÉPZÉSI ÖNÉRTÉKELÉSI MODELL I. HELYZETFELMÉRŐ SZINT FOLYAMATA 8
I. HELYZETFELMÉRÉSI SZINT FOLYAMATA 3. FEJLESZTÉSI FÁZIS 10. előadás
SOTER-LINE Soter-Line Oktatási, Továbbképző és Szolgáltató Kft.
„Vásárolj okosan” Mobil kiegészítők vásárlási szokásai
Idegen kulcsok Lokális és globális megszorítások Triggerek
SQL jogosultság-kezelés
Előadás 08 Eljárások, függvények Hibakezelés (Kivétel kezelés)
Táblázatkezelés 4. Képletek használata.
Hipotéziselmélet Adatelemzés.
Főcím, ajánlott kezdőkép.
Előadás másolata:

PL/SQL gyakorlás Kalmár György

1. feladat Írj PL/SQL programot, amely egy, a felhasználótól bekért életkortól idősebb személyekről kiírja: Nevüket Születési évüket és hónapot Városukat A megoldásban használj gyűjtőtáblát az adatok tárolására.

Megoldás set serveroutput on; DECLARE TYPE eredmeny_rec IS RECORD(szemelynev SZEMELY.NEV%TYPE, szuletes SZEMELY.SZULETESIDATUM%TYPE, varosnev VAROSOK.NEV%TYPE); TYPE eredmeny_tab IS TABLE OF eredmeny_rec INDEX BY PLS_INTEGER; eredmeny eredmeny_tab ; bekert_eletkor NUMBER(3); BEGIN bekert_eletkor := &bekeres; SELECT SZEMELY.NEV, SZEMELY.SZULETESIDATUM,VAROSOK.NEV BULK COLLECT INTO eredmeny FROM SZEMELY,VAROSOK WHERE 2016-EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM)> bekert_eletkor AND SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG; FOR i IN eredmeny.FIRST..eredmeny.LAST LOOP IF eredmeny.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE(eredmeny(i).szemelynev||' a '||eredmeny(i).varosnev||' varosban lakik. Szuletett:'||TO_CHAR(eredmeny(i).szuletes,'YYYY.MM')); END IF; END LOOP; END; /

2. feladat Írj PL/SQL programot, amely a városokhoz kiszámolja az azokban élők átlagos életkorát. Az átlagot egy függvény számolja ki, amelynek bemenő paramétere a feldolgozandó város neve. Az városokat tartalmazó táblán explicit kurzorral lépkedj végig. Az eredményeket jelenítsd is meg. Ugyanezt a feladatot oldd meg egy gyűjtőtábla és egy SELECT...INTO utasítás segítségével.

Megoldás (a) set serveroutput on; DECLARE atlag_valt NUMBER := 0; CURSOR varosok_cursor IS SELECT NEV FROM VAROSOK; FUNCTION atlag_fgv(varosnev IN VAROSOK.NEV%TYPE) RETURN NUMBER IS atlag NUMBER := 0; BEGIN SELECT AVG(2016-EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM)) INTO atlag FROM SZEMELY,VAROSOK WHERE VAROSOK.NEV=varosnev AND SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG; RETURN atlag; END; FOR aktualis_varos IN varosok_cursor LOOP atlag_valt := atlag_fgv(aktualis_varos.nev); DBMS_OUTPUT.PUT_LINE(aktualis_varos.nev||' varosban az atlagos eletkor: '||atlag_valt); END LOOP; /

Megoldás (b) set serveroutput on; DECLARE TYPE varos_stat_record IS RECORD(varosnev VAROSOK.NEV%TYPE,atlag_eletkor NUMBER); TYPE varos_stat_tabla IS TABLE OF varos_stat_record INDEX BY PLS_INTEGER; varosok_stat varos_stat_tabla; BEGIN SELECT VAROSOK.NEV,AVG(2016-EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM)) BULK COLLECT INTO varosok_stat FROM SZEMELY,VAROSOK WHERE SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG GROUP BY VAROSOK.NEV; FOR i IN varosok_stat.FIRST..varosok_stat.LAST LOOP IF varosok_stat.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE(varosok_stat(i).varosnev||' varosban az átlagos életkor: '||varosok_stat(i).atlag_eletkor); END IF; END LOOP; END; /

3. feladat Írj PL/SQL programot, amely meghatározza, hogy átlagosan a folyómenti vagy a nem folyómenti városokban élnek-e tovább az emberek. A program foglalkozzon hibakezelésekkel.

Megoldás set serveroutput on; DECLARE atlag_folyomenti NUMBER; atlag_nem_folyomenti NUMBER; BEGIN SELECT AVG(EXTRACT(YEAR FROM sysdate)-EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM)) INTO atlag_folyomenti FROM SZEMELY,VAROSOK WHERE VAROSOK.FOLYOMENTIE=1 AND SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG; SELECT AVG(EXTRACT(YEAR FROM sysdate)-EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM)) INTO atlag_nem_folyomenti FROM SZEMELY,VAROSOK WHERE VAROSOK.FOLYOMENTIE=0 AND SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG; DBMS_OUTPUT.PUT_LINE('Folyómenti átlag:'||atlag_folyomenti); DBMS_OUTPUT.PUT_LINE('Nem folyómenti átlag:'||atlag_nem_folyomenti); IF atlag_folyomenti>atlag_nem_folyomenti THEN DBMS_OUTPUT.PUT_LINE('Folyómenti városokban az átlagos életkor magasabb.'); ELSE DBMS_OUTPUT.PUT_LINE('Nem folyómenti városokban az átlagos életkor magasabb.'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Lekérdezés eredménye üres.'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('Lekérdezés eredménye nem egy sor.'); END; /

4. feladat Hozz létre egy függvényt adatbázis objektumként, amelynek bemenő paramétere egy város neve és egy logikai érték. Ha a logikai érték igaz,kiírja a város adatait, ha hamis, akkor nem. Visszatérési értéke a város irányítószáma. A függvény felhasználásával írj PL/SQL programot, amely a 60 évnél idősebb személyeknél kiírja a városuk adatait is, ellenkező esetben csak a személy adatait.

Megoldás CREATE FUNCTION varoskiir(varosnev_p IN VAROSOK.NEV%TYPE, kiir BOOLEAN:=FALSE) RETURN VAROSOK.IRSZ%TYPE IS varos_rec VAROSOK%ROWTYPE; BEGIN SELECT * INTO varos_rec FROM VAROSOK WHERE NEV=varosnev_p; IF kiir THEN DBMS_OUTPUT.PUT_LINE(varos_rec.nev||' '||varos_rec.irsz||' '||varos_rec.orszag); END IF; RETURN varos_rec.irsz; END;

Megoldás set serveroutput on; DECLARE CURSOR szemelyek IS SELECT * FROM SZEMELY; varosnev VAROSOK.NEV%TYPE; irsz_valt VAROSOK.IRSZ%TYPE; BEGIN FOR aktualis_szemely IN szemelyek LOOP SZEMELY_KIIR(aktualis_szemely); --már léteznie kell az órai anyagból IF 2016-EXTRACT(YEAR FROM aktualis_szemely.SZULETESIDATUM) > 60 THEN SELECT VAROSOK.NEV INTO varosnev FROM SZEMELY,VAROSOK WHERE SZEMELY.SZIGSZ=aktualis_szemely.SZIGSZ AND VAROSOK.IRSZ=SZEMELY.IRSZ AND VAROSOK.ORSZAG=SZEMELY.ORSZAG; irsz_valt := VAROSKIIR(varosnev,TRUE); END IF; END LOOP; END; /

5. feladat Írj PL/SQL programot, amely a hónapokhoz születési statisztikát készít (hányan születtek az adott hónapban). A megvalósítás használjon WHILE vezérlési szerkezetet a hónapok bejárásához.

Megoldás set serveroutput on; DECLARE honap_szamlalo PLS_INTEGER DEFAULT 1; szulettek PLS_INTEGER := 0; BEGIN WHILE honap_szamlalo<13 LOOP SELECT COUNT(*) INTO szulettek FROM SZEMELY,VAROSOK WHERE SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG AND EXTRACT(MONTH FROM SZEMELY.SZULETESIDATUM)=honap_szamlalo; DBMS_OUTPUT.PUT_LINE('A '||honap_szamlalo||'. honapban '||szulettek||' szemely szuletett.'); honap_szamlalo := honap_szamlalo+1; END LOOP; END; /

6. feladat Írj PL/SQL programot, amely egy gyűjtőtáblában elkészíti a 20. század évtizedekre lebontott születési statisztikáit (hányan születtek az adott évtizedben). A gyűjtőtábla elkészítése után járd be azt és írd ki a statisztikai adatokat. Ügyelj a kivételkezelésre.

set serveroutput on; DECLARE evtized_szamlalo PLS_INTEGER := 0; szulettek PLS_INTEGER := 0; TYPE evtized_stat IS RECORD(evtized PLS_INTEGER,szulettek PLS_INTEGER); TYPE evtized_stat_tabla IS TABLE OF evtized_stat INDEX BY PLS_INTEGER; stat_20sz evtized_stat_tabla; BEGIN WHILE evtized_szamlalo<10 LOOP SELECT COUNT(*) INTO szulettek FROM SZEMELY,VAROSOK WHERE SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG AND EXTRACT(YEAR FROM SZEMELY.SZULETESIDATUM) BETWEEN 1900+evtized_szamlalo*10 AND 1900+evtized_szamlalo*10+9; stat_20sz(evtized_szamlalo).evtized := evtized_szamlalo; stat_20sz(evtized_szamlalo).szulettek := szulettek; evtized_szamlalo := evtized_szamlalo+1; END LOOP; FOR i IN stat_20sz.FIRST..stat_20sz.LAST LOOP IF stat_20sz.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('A 20. szazad '||(stat_20sz(i).evtized+1)||'. evtizedeben '||stat_20sz(i).szulettek||' szemely szuletett.'); END IF; EXCEPTION WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('Lekérdezés hiba.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Egyéb hiba.'); END; /