Adatbázis Rendszerek II. 2. Gy: PLSQL 1.
B I T MAN
1/75
B Iv: T2015.02.22 MAN
A
PL/SQL alapjai
A
2/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
Tárolt eljárások Tárolt eljárás = PSM = Persistent Stored Module
(tartósan tárolt modul): adatbázisobjektumként tárolt algoritmikus program, amely SQL utasításokat is tartalmazhat. Szintaxisa az SQL algoritmikus kiterjesztésének tekinthető. A tárolt eljárásokra rendszerenként más-más elnevezést használnak, és szintaxisuk is többé-kevésbé eltér: – – – – – 3/75
SQL:1999 szabvány: PSM = Persistent Stored Modules Oracle: PL/SQL = Procedural Language extension to SQL SyBase, Microsoft SQL Server: Transact-SQL Informix: SPL = Stored Procedural Language MySQL: MySQL Stored Routines (5.1 verziótól), Stored Program Language (SPL) B I T MAN
Tárolt eljárások Tárolt eljárások előnyei: Az eljárások a szerveren vannak, így nem kell üzeneteket küldözgetni az SQL utasítások végrehajtásakor a kliens és a szerver között. Az eljárások elemzése egyszer történik meg. Az eljárásokra ugyanolyan biztonsági intézkedések vonatkoznak, mint az adatbázisban tárolt többi adatra.
4/75
B I T MAN
A PL/SQL alapjai PL/SQL : az Oracle SQL kiegészítése a procedurális
elemek definiálására PL/SQL programok építőköve a PL/SQL blokk DECLARE Deklarációs rész BEGIN Végrehajtási rész (kód rész)
EXCEPTION Hibakezelő rész END; 5/75
B I T MAN
A PL/SQL alapjai Blokk típusok: Névtelen blokk: Minden futtatáskor lefordítja a rendszer, nem tárolódik le, nem lehet rá hivatkozni. Nevesített blokk: Címkével azonosított blokk, amelynek címkéjére feltételes vagy ugró utasításokból hivatkozhatunk. Alprogramok: Tárolt függvények és eljárások, melyek nevükkel azonosítottak, és bármikor meghívhatók. Triggerek: Tárolt, névvel hívható blokkok, melyek
automatikusan lefutnak bizonyos műveletek esetén. Job-ok: Tárolt, névvel hívható blokkok, melyek megadott időpontokban automatikusan lefutnak. 6/75
B I T MAN
Blokk típusok Névtelen
7/75
Eljárás
Függvény
[DECLARE]
PROCEDURE név IS
BEGIN -- utasítások
BEGIN -- utasítások
[EXCEPTION]
[EXCEPTION]
FUNCTION név RETURN adattípus IS BEGIN -- utasítások RETURN érték; [EXCEPTION]
END;
END;
END;
B I T MAN
A PL/SQL alapjai Névtelen blokk: declare pi constant NUMBER(9,7) := 3.1415926; sugar INTEGER(5); Változó deklarációk terulet NUMBER(14,2); begin sugar := 3; Utasítások terulet := pi * power(radius, 2); INSERT INTO korok VALUES (sugar, terulet); end; 8/75
B I T MAN
A PL/SQL alapjai <
> Nevesített blokk, címkével declare pi constant NUMBER(9,7) := 3.1415926; terulet NUMBER(14,2); cursor meret_cursor is SELECT * FROM meretek; meret meret_cursor%ROWTYPE; begin open meret_cursor; loop fetch meret_cursor into meret; terulet := pi * power(meret.sugar, 2); INSERT INTO korok VALUES (meret.sugar,terulet); exit when meret_cursor%notfound; end loop; close meret_cursor; B I T MAN 9/75 end;
A PL/SQL alapjai Az utasításokat ; zárja le
Kis- és nagybetű egyenértékű (az utasításokban a
kulcsszavakat szoktuk nagybetűvel írni, de nem kötelező!) Comment REM vagy -- , többsoros /* */ Használat előtt deklarálni kell a változókat, azonosítókat, eljárásokat! ** hatványozás, != nem egyenlő, || karakterlánc összefűzés Egy PL/SQL program egy vagy több blokkból áll, a blokkok egymásba ágyazhatók
10/75
B I T MAN
A PL/SQL alapjai Deklarációs rész
– Változók – Konstansok – Cursor-szerkezetek – Hibakezelési elemek Törzs rész – Utasítások – SQL parancsok – Vezérlési elemek Hibakezelő rész – Hibakezelő műveletek leírása 11/75
B I T MAN
A
PL/SQL alapjai
A
12/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
Változók Programváltozók: adatbázisban létező típusú változók Típusmásolással létrehozott változók:
– Egy adott tábla egy adott oszlopával megegyező típus (oszlopváltozó) – Egy adott tábla rekordszerkezetével megegyező típus (sorváltozó)
13/75
B I T MAN
Deklarációs rész DECLARE
változóazonosító típus(attribútum) := kifejezés; Programváltozók:
– NUMBER: Numerikus érték, opcionálisan kijelölhet a teljes ábrázolási hossz és a tizedes jegyek darabszáma – CHAR: Szöveges érték, opcionálisan kijelölhető a karakterek darabszáma – DATE: dátum típus – BOOLEAN: logikai adattípus
14/75
B I T MAN
DECLARE (példák) Numerikus érték, 8 számjegy, 2 tizedes, induló érték 3
– ar NUMBER(8,2) := 3; Szöveges érték, 25 karakter – nev CHAR(25); Dátum érték, kezdértéke 2011. szeptember 28. – datum DATE := ′11-SEPT.-28′; Logikai érték – reszvetel BOOLEAN; Konstansok megadása
– ARFOLYAM CONSTANT NUMBER(6,1) := 103.2; 15/75
B I T MAN
DECLARE (példák) Típusmásolással létrehozott változók: Oszlopváltozó: DECLARE – v1 tábla.mező%TYPE -- v1 auto.rendszam%TYPE; – A megadott tábla megadott oszlopának típusát veszi fel Sorváltozó:
DECLARE – v2 tábla%ROWTYPE -- v2 auto%ROWTYPE; – A megadott tábla rekordszerkezetével megegyező típusú változó – Hivatkozás egy elemére: v2.rendszam 16/75
B I T MAN
DECLARE (példák) DECLARE v_sor vevo%ROWTYPE; BEGIN SELECT * INTO v_sor FROM vevo WHERE partner_id = 21; DBMS_OUTPUT.PUT_LINE(v_sor.MEGNEVEZES); END; DBMS_OUTPUT.PUTLINE – Szöveg kiírása a konzolra.
17/75
B I T MAN
Autós példa Adott a következő tábla, a feladatok ezen értelmezettek:
rsz
tipus
szín
auto
kor
18/75
ar
B I T MAN
Autós példa 1. PL/SQL blokk írása egy autó rekord felvitelére, ahol a mezőértékeket memóriaváltozókon keresztül adjuk meg, melyek típusa az AUTO tábla mezőinek típusával megegyező. DECLARE a auto.rsz%type := 'abc124'; b auto.tipus%type:= 'fiat' ; c auto.szin%type := 'piros'; d auto.kor%type := 3; e auto.ar%type := 18000000; BEGIN INSERT INTO AUTO VALUES (a, b, c, d, e); END; 19/75
B I T MAN
Autós példa 2. PL/SQL blokk írása, mely egy memóriaváltozóban megadott kornál idősebb autók árát csökkenti 10%-al. DECLARE x NUMBER(2) := 7; BEGIN UPDATE AUTO SET ar=ar*0.9 WHERE kor >= x; END;
20/75
B I T MAN
Autós példa 3. PL/SQL blokk írása, memóriaváltozóban megadott korú autók törlésére. DECLARE x AUTO.KOR%TYPE := 2; BEGIN DELETE FROM AUTO WHERE kor = x; END;
21/75
B I T MAN
Autós példa 4. PL/SQL blokk írása autók átlagárának lekérdezésére és a napló táblában történő eltárolására. DECLARE x AUTO.AR%TYPE; BEGIN SELECT AVG(ar) INTO x FROM AUTO; INSERT INTO naplo VALUES (x, sysdate, user); END;
22/75
B I T MAN
A
PL/SQL alapjai
A
23/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
DBMS_OUTPUT Használatát a SET SERVEROUTPUT ON SQL*Plus
paranccsal engedélyezni kell! Hasznos parancsok:
– – – –
24/75
ACCEPT: változó értékének beolvasása PUT: Kiírás ugyanabba a sorba NEW_LINE: Sortörés PUT_LINE: Kiírás külön sorba
B I T MAN
DBMS_OUTPUT (Példa) SET SERVEROUTPUT ON ACCEPT nev PROMPT 'Kérem adja meg a nevét: ' DECLARE szoveg varchar2(50); szoveg := nev || ' sikeresen…'; BEGIN szoveg := CONCAT('&nev',' sikeresen végrehajtotta a programot!'); DBMS_OUTPUT.PUT_LINE (szoveg); END;
25/75
B I T MAN
Autós példa 5. PL/SQL blokk írása autók átlagárának lekérdezésére és kiíratása. DECLARE x AUTO.AR%TYPE; BEGIN SELECT AVG(ar) INTO x FROM AUTO; DBMS_OUTPUT.PUT_LINE(x); END;
26/75
B I T MAN
Autós példa 6. PL/SQL blokk írása az autók darabszámának lekérdezésére és kiíratása. DECLARE x int; BEGIN SELECT count(*) INTO x FROM AUTO; DBMS_OUTPUT.PUT_LINE('Autók száma: '|| x); END;
27/75
B I T MAN
Autós példa 7. Tárolt eljárás készítése a 10 évnél idősebb autók törlésére. Fix feltétel!
create procedure torol as begin delete from auto where kor>10; end;
28/75
B I T MAN
Autós példa 8. Tárolt eljárás készítése paraméterként megadott kornál idősebb autók törlésére. create or replace procedure torol (x in number) as begin delete from auto where kor>x; end;
29/75
B I T MAN
Példa 9. Tárolt függvény készítése, mellyel egy numerikus érték növelhető 5-el. create function novel5 (x in number) return number as begin return x+5; end;
30/75
B I T MAN
Autós példa 10. Plsql blokk írása az előző függvény meghívására és a megnövelt érték napló táblában történő eltárolására. declare x number(6) := 12; ujx number(6); begin ujx := novel5(x); insert into naplo values(user, sysdate, ujx); end;
31/75
B I T MAN
Példa 11. Tárolt függvény készítése, mellyel egy numerikus érték növelhető 5-el. create function novel5 (x in number) return number as begin declare return x+5; x number(6) := 12; begin end; > variable szam number > execute :szam := novel5(13); A PL/SQL eljárás sikeresen befejeződött. > print szam
x := novel5(13); dbms_output.put_line(x); end;
SZAM 18 32/75
B I T MAN
Példa 11b. Tárolt függvény készítése, mellyel egy numerikus érték növelhető 5-el. create function novel5 (x in number) return number as begin return x+5; end; Select novel5(13) from dual;
> Select novel5(13) from dual; NOVEL5(13) 18
33/75
B I T MAN
Példa 12. Tárolt eljárás készítése, mellyel egy numerikus érték növelhető 5-el. create or replace procedure novelot (x in number) as ujx number(6); begin ujx := x+5; dbms_output.put_line(ujx); begin end; novelot(27); end
> execute novel(27); A PL/SQL eljárás sikeresen befejeződött. UJX 32 34/75
B I T MAN
Példa 13. Tárolt eljárás készítése a legmagasabb ár kiírására az autó táblából. create or replace procedure maxar as x number(8); begin select max(ar) into x from auto; dbms_output.put_line(x); end;
35/75
begin maxar; end
B I T MAN
Példa 13b. Tárolt függvény készítése a legmagasabb ár lekérésére az autó táblából. create or replace function maxarfgv return int as x int; begin select max(ar) into x from auto; return(x); end; declare select maxarfgv from dual; x int; begin x := maxarfgv; dbms_output.put_line(x); end; 36/75
B I T MAN
A
PL/SQL alapjai
A
37/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
Vezérlési szerkezetek - IF IF feltétel1 THEN utasítások1 ELSIF feltétel2 THEN utasítások2 ELSIF feltétel3 THEN utasítások3 … ELSE utasításokN END IF;
38/75
B I T MAN
IF (Példa) DECLARE v_avgber munkatars.ber%TYPE; szoveg VARCHAR2(50); begin SELECT AVG(ber) INTO v_avgber FROM munkatars; IF v_avgber < 100000 THEN szoveg:='kevesebb mint százezer.'; ELSIF (v_avgber > 100000) AND (v_avgber <= 200000) THEN szoveg:='százezer és kétszázezer közötti.'; ELSE szoveg:='kétszázezer fölött van.'; END IF; DBMS_OUTPUT.PUT_LINE('Az átlagbér' || szoveg); END; 39/75
B I T MAN
IF (Példa) Eljárás, mely ha nem létező rendszámot kap paraméterül, akkor hibaüzenetet ír a képernyőre, egyébként kiírja az autó típusát. create or replace procedure rsz_tip (rszbe char) is x int := 0; t varchar(30); begin select count(*) into x from auto where rsz=rszbe; if x = 0 then dbms_output.put_line('Nem létező rendszám: '||rszbe); else select tipus into t from auto where rsz=rszbe; dbms_output.put_line('Az autó típusa: '||t); end if; end; begin begin rsz_tip('aaa100'); end; 40/75
rsz_tip('JRZ932'); end;
B I T MAN
Vezérlési szerkezetek - Ciklusok Alap ciklus (LOOP ciklus)
WHILE ciklus FOR ciklus
41/75
B I T MAN
Vezérlési szerkezetek - LOOP LOOP utasítások END LOOP; Kilépés: EXIT;
Feltétellel együtt: EXIT WHEN feltétel;
x := 0; LOOP x := x+1; EXIT WHEN x=20; END LOOP; 42/75
-- Eredmény: x = 20
B I T MAN
Loop (Példa) DECLARE v_sorsz vevo.partner_id%TYPE := 21; v_megnev vevo.megnevezes%TYPE; BEGIN LOOP SELECT megnevezes INTO v_megnev FROM vevo WHERE partner_id = v_sorsz; DBMS_OUTPUT.PUT_LINE(v_megnev); v_sorsz := v_sorsz +1; EXIT WHEN v_sorsz > 28; END LOOP; END; 43/75
B I T MAN
Vezérlési szerkezetek -WHILE WHILE feltétel LOOP utasítások END LOOP; x := 0; WHILE x<20 LOOP x := x+1; END LOOP;
44/75
-- Eredmény: x = 20
B I T MAN
Vezérlési szerkezetek - FOR FOR index IN induló_egész .. záró_egész LOOP utasítások END LOOP; Indexváltozó:
– – – –
minden értéket felvesz a tartományon belül. Nem szükséges külön deklarálni Automatikusan NUMBER típusú Konstansként látható és használható a cikluson belül
x := 0; FOR i IN 1..10 LOOP x := x + i; -- Eredmény: x = 55 (1+2+…+10=55) END LOOP B I T MAN
45/75
For (példa) FOR szam IN 1..500 LOOP INSERT INTO gyokok VALUES (szam, SQRT(szam)); END LOOP;
46/75
B I T MAN
A
PL/SQL alapjai
A
47/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
Tömbök Kb. mint a C és a Java nyelvekben alkalmazott tömbök
A tömb indexnek a kezdő értéke mindig egy, és mindig
eggyel növekszik. A tömb típus deklarálása: TYPE tömbnév IS VARRAY(méret) OF elemtípus; Az elemtípus alap-, rekord, vagy objektum típusú lehet. Type auto_t1 is varray(10) of int; Type auto_t2 is varray(10) of auto.rsz%type; Type auto_t3 is varray(10) of auto%rowtype; Type auto_t4 is varray(10) of auto;
48/75
B I T MAN
Tömbök Értékadás:
Értékadás:
Declare Type t1tip is varray(3) of int; t1 t1tip; Begin t1:=t1tip(13,55,32);
Declare Type t1tip is varray(100) of int; t1 t1tip := t1tip(); Begin t1.extend(3); t1(1):=13; t1(2):=55; t1(3):=32;
49/75
B I T MAN
Tömb kezelése FOR ciklussal DECLARE type nevtomb IS VARRAY(5) OF VARCHAR2(10); type ponttomb IS VARRAY(5) OF INTEGER; nevek nevtomb; pontok ponttomb; osszdb integer; BEGIN nevek := nevtomb('BitMan', 'Nórika', 'Pistike', 'Tökmag', 'Zsuzsika'); pontok:= ponttomb(98, 97, 78, 87, 92); osszdb:= nevek.count; dbms_output.put_line('Összesen '|| osszdb || ' darab hallgató'); FOR i in 1 .. osszdb LOOP dbms_output.put_line('Hallgató: ' || nevek(i) || ' Pontszám: ' || pontok(i)); END LOOP; END; 50/75
B I T MAN
A
PL/SQL alapjai
A
51/75
PL/SQL alapjai
Változók
DBMS_OUTPUT
Vezérlési szerkezetek
Tömbök
Tárolt rutinok kezelése
B I T MAN
Tárolt alprogramok létrehozása
Szövegszerkesztő
Szerkesztés 1
Text fájl Tárolás az adatbázisban
Figyelmeztetés: A függvény létrehozása fordítási hibákkal fejeződött be.
Show errors
2
Forráskód Fordítás P-kód
Az eljárás létrejött. 52/75
Futtatás
B I T MAN
Tárolt rutinok kezelése Bár a rendszer megkülönbözteti az eljárást és a
függvényt, nem lehet ugyanazzal a névvel eljárást és függvényt is létrehozni!
Létrehozott alprogramok nevének listáztatása:
select * from user_procedures;
53/75
B I T MAN
Tárolt rutinok kezelése SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
54/75
B I T MAN
Tárolt rutinok kezelése Alprogram tartalmának (sorainak) kiíratása:
select text from user_source where name = 'TOROL' order by line;
Alprogramok törlése:
Drop procedure eljárásnév; Drop function függvénynév; Ha függvényt próbálunk eljárásként törölni:
Drop procedure r_szin;
55/75
B I T MAN
Alprogramok paraméterei IN paraméter – alapértelmezett
IN paraméter
OUT paraméter – visszatérő értékhez
IN OUT paraméter
INOUT – be-kimenő érték
OUT paraméter
DECLARE BEGIN EXCEPTION
Értékátadás: parancssori paraméterekkel
END;
– Tetszőleges típusúak, kijelentkezéskor törlődnek – Deklarálás: DECLARE változó típus := kezdőérték; • Pl.: declare szam int := 0; 56/75
B I T MAN
Alprogramok paraméterei Példa IN és OUT paraméterre create or replace procedure negyzet1 (a in number, b out number) is begin b := a*a; end; declare a int:=5; b int; begin negyzet1(a, b); dbms_output.put_line(b); end;
57/75
B I T MAN
Alprogramok paraméterei Példa IN OUT paraméterre create procedure negyzet2 (a in out int) is begin a := a*a; end; declare a int:=5; begin negyzet2(a); dbms_output.put_line(a); end;
58/75
B I T MAN
Eljárások lefuttatása – SQL Commands Paraméter nélküli eljárások elindítása: begin adb; end;
begin adb(); end;
IN paraméter OUT paraméter
IN OUT paraméter
DECLARE
BEGIN
Csak IN paraméterek esetén: begin torol(10); end;
IN és OUT paraméterek esetén:
59/75
EXCEPTION END;
declare vp int; begin negyzet(5, vp); dbms_output.put_line(vp); end;
B I T MAN
Függvények lefuttatása – SQL Commands Függvények elindítása:
változó := fgv_név(In paraméterek);
IN paraméter
DECLARE
BEGIN RETURN érték
EXCEPTION
select szindb(′piros′) from dual; declare x number(6) := 12; begin x := szindb(′piros′); dbms_output.put_line(x); end; 60/75
END;
Ha a függvény végrehajtási részében DML művelet van, ezt a megoldást kell használni.
B I T MAN
MiniBolt ER modell Kkod
Nev
Tkod
Nev Ar
Kategória
K-T
Termék Leiras
Datum Sorsz
Vásárlás Darab
Nev
Vásárló VID Cim
61/75
Fizmod
B I T MAN
MiniBolt struktúra modell Kategória
Termék
Kkod Nev
Kategoria Tkod Nev Ar
Leiras
Vásárlás Tkod Sorszam Idopont Darab VID
Vásárló VID Nev Cim
62/75
Fizmod
B I T MAN
Órai feladatok 1. Hozza létre a MiniBolt adattábláit: Create table Kategoria( Kkod char(3) primary key, Nev char(20)); Create table Termek( Tkod char(3) primary key, Nev char(20), Ar numeric(6), Leiras char(20), Kategoria char(3) not null references Kategoria);
63/75
B I T MAN
Órai feladatok 1. Hozza létre a MiniBolt adattábláit: Create table Vasarlo( VID char(3) primary key, Nev char(20), Cim char(20), Fizmod char(4)); Create table Vasarlas( Sorsz numeric(5), Datum date, Tkod char(3) not null references Termek, Darab numeric(4), VID char(3) not null references Vasarlo, unique (Sorsz, Datum) );
64/75
B I T MAN
Órai feladatok 2. Vigye fel az alábbi rekordokat: insert into Kategoria values('k01', 'Kaja'); insert into Kategoria values('k02', 'Pia'); insert into Kategoria values('k03', 'Ruha'); insert into Kategoria values('k04', 'Egyéb'); insert into Vasarlo values('v01', 'Kék Alma', 'Mc. Kék u.12', 'kp'); insert into Vasarlo values('v02', 'Zöld Galamb', 'Mc. Hó u.72', 'atut'); insert into Vasarlo values('v03', 'Fekete Farkas', 'Mc. Vas u.25', 'bkar'); insert into Vasarlo values('v04', 'Kovács Éva', 'Eger. Lap u.4', 'bkar'); insert into Vasarlo values('v05', 'Kis Béla', 'Eger. Bé u.9', 'kp'); insert into Vasarlo values('v06', 'Kis Jenő', 'Eger. Cé u.11', 'atut'); insert into Vasarlo values('v07', 'Kis Noé', 'Eger. Cé u.11', 'kp'); insert into Vasarlo values('v08', 'Kis Tas', 'Eger. Cé u.11', 'bkar'); insert into Vasarlo values('v09', 'Hó Manó', 'Nyék. Tó u.74', 'atut'); insert into Vasarlo values('v10', 'Ká Rozi', 'Nyék. Ká u.5', 'kp'); insert into Vasarlo values('v11', 'Víz Jenő', 'Mc. Út u.39', 'bkar'); 65/75
B I T MAN
Órai feladatok 2. Vigye fel az alábbi rekordokat: insert into Termek values('t01', 'sör', 200, 'világos', 'k02'); insert into Termek values('t02', 'bor', 200, 'vörös', 'k02'); insert into Termek values('t03', 'zsömle', 20, 'kerek', 'k01'); insert into Termek values('t04', 'zsír', 100, 'disznó', 'k01'); insert into Termek values('t05', 'paprika', 100, 'zöld', 'k01'); insert into Termek values('t06', 'csipsz', 300, 'sajtos', 'k01'); insert into Termek values('t07', 'csipsz', 400, 'retkes', 'k01'); insert into Termek values('t08', 'mackó felső', 8000, 'Adidasss', 'k03'); insert into Termek values('t09', 'mackó alsó', 8000, 'Adidasss', 'k03'); insert into Termek values('t10', 'mackó póló', 5000, 'Adidasss', 'k03'); insert into Termek values('t11', 'Fű', 5000, 'KO', 'k04'); insert into Termek values('t12', 'AB2 puska', 5000, 'Mert megérdemled', 'k04'); insert into Termek values('t13', 'Benzin', 350, 'Óccsó', 'k04'); insert into Termek values('t14', 'Nő', 10000, 'Szőke', 'k04'); insert into Termek values('t15', 'Nő', 20000, 'Barna', 'k04'); insert into Termek values('t16', 'Óvszer', 2000, 'Családi csomag', 'k04'); 66/75
B I T MAN
Órai feladatok 2. Vigye fel az alábbi rekordokat: insert into Vasarlas values(1, '15-FEBR. -16', 't14', 1, 'v06'); insert into Vasarlas values(2 , '15-FEBR. -16', 't15', 1, 'v06'); insert into Vasarlas values(3 , '15-FEBR. -16', 't16', 1, 'v06'); insert into Vasarlas values(4 , '15-FEBR. -16', 't03', 4, 'v01'); insert into Vasarlas values(5 , '15-FEBR. -16', 't04', 1, 'v01'); insert into Vasarlas values(6 , '15-FEBR. -16', 't02', 2, 'v02'); insert into Vasarlas values(7 , '15-FEBR. -16', 't06', 2, 'v02'); insert into Vasarlas values(8 , '15-FEBR. -16', 't07', 4, 'v02'); insert into Vasarlas values(9 , '15-FEBR. -16', 't08', 1, 'v03'); insert into Vasarlas values(10 , '15-FEBR. -16', 't09', 1, 'v03'); insert into Vasarlas values(11 , '15-FEBR. -16', 't11', 3, 'v04'); insert into Vasarlas values(12 , '15-FEBR. -16', 't12', 1, 'v04'); insert into Vasarlas values(13 , '15-FEBR. -16', 't13', 100, 'v05'); insert into Vasarlas values(1, '15-FEBR. -17', 't12', 1, 'v11'); insert into Vasarlas values(2 , '15-FEBR. -17', 't16', 5, 'v10'); insert into Vasarlas values(3 , '15-FEBR. -17', 't16', 1, 'v09'); insert into Vasarlas values(4 , '15-FEBR. -17', 't03', 6, 'v07');
67/75
B I T MAN
Órai feladatok 3. 1. Készítsen egy UjKategoria nevű tárolt eljárást, mely
paraméterként megkapja egy új kategória adatait, és beszúrja a Kategoria táblába. Próbálja ki az eljárást. H 29 2. Készítsen egy KategoriaTorol nevű tárolt eljárást, mely kitöröl egy adott kódú kategóriát. Próbálja ki az eljárást. 3. Készítsen KategoriaDarab nevű tárolt függvényt, mely
visszaadja a kategóriák darabszámát. Hívja meg a függvényt.
68/75
H
36
B I T MAN
Órai feladatok 4. Készítsen egy UjTermek2 nevű tárolt eljárást, mely
paraméterként megkapja egy új termék adatait, és H beszúrja a termek táblába. Ha már létező kategóriakódot kap paraméterként, írjon üzenetet a képernyőre (Van már ilyen kategória: kkod), és ne hozza létre a kategóriát.
69/75
40
B I T MAN
Órai feladatok 5. Készítsen egy VasarloTorol nevű eljárást, , mely
paraméterként megkapja egy vásárló VID-jét. Ha nem létezik a személy, akkor írjon üzenetet a képernyőre (Nem létező személy: VID).
70/75
H
40
B I T MAN
Órai feladatok 6. Készítsen egy TermekAtlag nevű függvényt, amely
kiszámítja, és visszatérő értékként visszaadja a termék táblában lévő termékek átlagárát. Hívja meg a függvényt, használjon a visszatérő H értékhez parancssori változót. Írja ki az eredményt a képernyőre.
40
Hívja meg a függvényt a select paranccsal is!
71/75
B I T MAN
Órai feladatok 7. Készítsen egy TermKatAtlag nevű függvényt, amely
kiszámítja, és visszatérő értékként visszaadja a termék táblában lévő, adott kategóriájú termékek átlagárát. A függvény bemenő paramétere legyen a kategória H neve (nem a kódja!) Ha nem létezik a megadott kategória, írja ki ennek tényét a függvény a képernyőre (Nem létező kategória: KatBe), és adjon vissza 0 értéket!
40
Hívja meg a függvényt!
72/75
B I T MAN
Órai feladatok 8. 1. Készítsen egy OsszParos nevű tárolt eljárást, mely
paraméterként megkap egy kezdő és egy végértéket (egész számok), és kiszámítja a két végérték közötti páros számok összegét. H
45
Segítség: - A bemenő paraméterek értékét nem lehet felülírni! - IF MOD(szám, 2) = 0 THEN – ha a szám kettővel osztva nullát ad maradékul akkor
73/75
B I T MAN
Felhasznált irodalom Kovács László: PL/SQL, elektronikus jegyzet
Barabás Péter: Adatbázis rendszerek 2.,
elektronikus jegyzet Jeffery D. Ullman, Jennifer Widom: Adatbázisrendszerek Kende Mária, Nagy István: ORACLE példatár Don Burleson: Oracle Tips (www.dba-oracle.com)
74/75
B I T MAN
VÉGE V ÉGE 75/75
B I T MAN