B I T M A N B I v: T 2015.02.22 M A N



Hasonló dokumentumok
Adatbázis Rendszerek II. 3. PLSQL alapok 92/1B IT MAN

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek II. 2. Gyakorló környezet

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

Haladó DBMS ismeretek 1

B I T M A N B I v: T M A N

Adatbázis Rendszerek II. 3. SQL alapok

PL/SQL 1. rész. Procedural Language extension to SQL

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

PL/SQL (folytatás) Kurzorok, függvények, eljárások

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

B I T M A N B I v: T M A N

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Adatbázis Rendszerek II. 4. PLSQL Kurzorok, hibakezelés 53/1B IT MAN

Tranzakciókezelés PL/SQL-ben

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázis-kezelés. Harmadik előadás

Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A 1-1

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Adatbázis rendszerek SQL nyomkövetés

Adatbázis Rendszerek II. 3. Ea: MySQL alapok

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Összefoglaló. <variable_name> [IN OUT IN OUT] <data_type> [:=<default_value>] ... <label_name>: <statements>... GOTO <label_name>;...

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Bevezetés: az SQL-be

PL/SQL blokk. [címke] [DECLARE deklarációs utasítás(ok)] BEGIN végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név];

Kalmár György Adatbázis alapú rendszerek

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Együttes hozzárendelés

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázisok* tulajdonságai

Adatbázisban tárolt kollekciók

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Adatbázis-kezelés, információs-rendszerek

B I T M A N B I v: T M A N

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

B I T M A N B I v: T M A N

Java és web programozás

Adatbázis kezelés Delphiben. SQL lekérdezések

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Adatbázis Rendszerek II. 4. Ea: MySQL Tárolt eljárások 110/1 B IT MAN

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Az SQL*Plus használata

Informatika terméktervezőknek

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Készítette: Szabóné Nacsa Rozália

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Algoritmizálás és adatmodellezés tanítása 1. előadás

Adatbázis használata PHP-ből

BEVEZETÉS Az objektum fogalma

LBRA6i integrált rendszer

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

PL/SQL feladatok 8. gyakorlat

Jegyz könyv. Adatbázis-rendszerek II. Beadandó feladat. Miskolci Egyetem

Adatbázisok elmélete 9. előadás

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Database Systems II. ZH összefoglaló

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

ADATBÁZIS RENDSZEREK I BEADANDÓ

SQL DDL-1: táblák és megszorítások

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Programozási nyelvek (ADA)

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Elemi alkalmazások fejlesztése IV.

Adatbázisok elmélete 10. előadás

Triggerek. Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Java és web programozás

Adatbázis rendszerek Gy: MySQL alapok

1. Alapok. #!/bin/bash

Programozás alapjai. 5. előadás

SQLServer. DB Recovery modes

Adatbázisok elmélete 9. előadás

BASH script programozás II. Vezérlési szerkezetek

S z á m í t ó g é p e s a l a p i s m e r e t e k

Adatbázis használat I. 5. gyakorlat

Adatbázisok tavaszi félév Vizsgatételsor

Adatbázisok I A relációs algebra

Átírás:

Adatbázis Rendszerek II. 2. Gy: PLSQL 1. B I v: T 2015.02.22 M A N 1/75

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 2/75

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)

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

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 BEGIN EXCEPTION Deklarációs rész Végrehajtási rész (kód rész) Hibakezelő rész 5/75 END;

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

Blokk típusok Névtelen Eljárás Függvény [DECLARE] BEGIN -- utasítások [EXCEPTION] END; PROCEDURE név IS BEGIN -- utasítások [EXCEPTION] END; FUNCTION név RETURN adattípus IS BEGIN -- utasítások RETURN érték; [EXCEPTION] END; 7/75

A PL/SQL alapjai Névtelen blokk: declare pi constant NUMBER(9,7) := 3.1415926; sugar INTEGER(5); terulet NUMBER(14,2); begin sugar := 3; terulet := pi * power(radius, 2); Változó deklarációk Utasítások INSERT INTO korok VALUES (sugar, terulet); end; 8/75

A PL/SQL alapjai <<Korok_beszurasa>> declare Nevesített blokk, címkével 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; end; 9/75

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

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

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 12/75

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

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

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

DECLARE (példák) Típusmásolással létrehozott változók: Oszlopváltozó: 16/75 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

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

Autós példa Adott a következő tábla, a feladatok ezen értelmezettek: rsz tipus auto szín kor ar 18/75

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

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

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

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

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 23/75

DBMS_OUTPUT Használatát a SET SERVEROUTPUT ON SQL*Plus paranccsal engedélyezni kell! Hasznos parancsok: 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 24/75

DBMS_OUTPUT (Példa) SET SERVEROUTPUT ON ACCEPT nev PROMPT 'Kérem adja meg a nevét: ' DECLARE szoveg varchar2(50); BEGIN szoveg := nev ' sikeresen '; szoveg := CONCAT('&nev',' sikeresen végrehajtotta a programot!'); DBMS_OUTPUT.PUT_LINE (szoveg); END; 25/75

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

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

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

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

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

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

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 end; return x+5; > variable szam number > execute :szam := novel5(13); A PL/SQL eljárás sikeresen befejeződött. > print szam SZAM declare x number(6) := 12; begin x := novel5(13); dbms_output.put_line(x); end; 32/75 18

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; NOVEL5(13) 18 Select novel5(13) from dual; 33/75

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); end; > execute novel(27); A PL/SQL eljárás sikeresen befejeződött. begin novelot(27); end 34/75 UJX 32

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; begin maxar; end 35/75

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 36/75 select max(ar) into x from auto; return(x); end; declare x int; begin x := maxarfgv; dbms_output.put_line(x); end; select maxarfgv from dual;

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 37/75

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

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

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; 40/75 begin rsz_tip('aaa100'); end; begin rsz_tip('jrz932'); end;

Vezérlési szerkezetek - Ciklusok Alap ciklus (LOOP ciklus) WHILE ciklus FOR ciklus 41/75

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; -- Eredmény: x = 20 42/75

Loop (Példa) DECLARE 43/75 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;

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; -- Eredmény: x = 20 44/75

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; END LOOP 45/75 -- Eredmény: x = 55 (1+2+ +10=55)

For (példa) FOR szam IN 1..500 LOOP INSERT INTO gyokok VALUES (szam, SQRT(szam)); END LOOP; 46/75

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 47/75

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

Tömbök Értékadás: Declare Type t1tip is varray(3) of int; t1 t1tip; Begin t1:=t1tip(13,55,32); Értékadás: 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

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

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 51/75

Tárolt alprogramok létrehozása 52/75 Szövegszerkesztő Figyelmeztetés: A függvény létrehozása fordítási hibákkal fejeződött be. Show errors Az eljárás létrejött. Szerkesztés 1 2 Text fájl Tárolás az adatbázisban Forráskód Fordítás P-kód Futtatás

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

Tárolt rutinok kezelése SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') 54/75

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

Alprogramok paraméterei IN paraméter alapértelmezett OUT paraméter visszatérő értékhez INOUT be-kimenő érték IN paraméter OUT paraméter IN OUT paraméter DECLARE Értékátadás: parancssori paraméterekkel BEGIN EXCEPTION 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

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

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

Eljárások lefuttatása SQL Commands Paraméter nélküli eljárások elindítása: begin adb; end; begin adb(); end; Csak IN paraméterek esetén: IN paraméter OUT paraméter IN OUT paraméter DECLARE BEGIN EXCEPTION IN és OUT paraméterek esetén: 59/75 begin torol(10); end; END; declare vp int; begin negyzet(5, vp); dbms_output.put_line(vp); end;

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; END; declare x number(6) := 12; begin x := szindb( piros ); dbms_output.put_line(x); end; 60/75 Ha a függvény végrehajtási részében DML művelet van, ezt a megoldást kell használni.

MiniBolt ER modell Kkod Nev Tkod Nev Ar Kategória K-T Termék Leiras Sorsz Vásárlás Datum Darab Nev VID Vásárló Cim Fizmod 61/75

MiniBolt struktúra modell Kategória Kkod Nev Termék Kategoria Tkod Nev Ar Leiras Vásárlás Tkod Sorszam Idopont Darab VID Vásárló VID Nev Cim Fizmod 62/75

Ó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

Ó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

Órai feladatok 2. Vigye fel az alábbi rekordokat: 65/75 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');

Ó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

Ó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

Ó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. 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. H 29 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. H 36 68/75

Ó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 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. H 40 69/75

Ó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). H 40 70/75

Ó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ő értékhez parancssori változót. Írja ki az eredményt a képernyőre. H 40 Hívja meg a függvényt a select paranccsal is! 71/75

Ó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 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! H 40 Hívja meg a függvényt! 72/75

Ó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

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

VÉGE V É G E 75/75