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

Hasonló dokumentumok
B I T M A N B I v: T M A N

Haladó DBMS ismeretek 1

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

Adatbázis Rendszerek II. 3. SQL alapok

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

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

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

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

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

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

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

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:

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

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

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

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

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

Adatbázis rendszerek SQL nyomkövetés

Tranzakciókezelés PL/SQL-ben

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

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

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:

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)

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

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

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

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

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

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

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

Informatika terméktervezőknek

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

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

Együttes hozzárendelés

Adatbázisban tárolt kollekciók

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

Bevezetés: az SQL-be

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

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

Adatbázisok* tulajdonságai

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

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

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

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

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

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.

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

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

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

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

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

Java és web programozás

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

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

ADATBÁZIS RENDSZEREK I BEADANDÓ

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

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

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

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

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

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

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

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

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

1. Alapok. #!/bin/bash

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

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

Adatbázis rendszerek Gy: MySQL alapok

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

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

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

Az SQL adatbázisnyelv: DML

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

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

PL/SQL feladatok 8. gyakorlat

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

Programozási nyelvek (ADA)

LBRA6i integrált rendszer

SQL DDL-2 (aktív elemek) triggerek

BEVEZETÉS Az objektum fogalma

A C# programozási nyelv alapjai

Java és web programozás

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Webprogramozás szakkör

Az SQL*Plus használata

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

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

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

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

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

Adatbázis tartalmának módosítása

SQLServer. DB Recovery modes

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

Vizuális programozás gyakorlat

Smalltalk 2. Készítette: Szabó Éva

Átírás:

Adatbázis Rendszerek II. 3. PLSQL alapok 92/1B IT MAN B IT v: 2017.03.02 MAN

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 92/2 B IT MAN

A PL/SQL alapjai PL/SQL: Procedurális nyelv (Procedural Language for SQL) Kombinálja az SQL adatmanipulációt a procedurális nyelvi feldolgozással. Ada-szerű szintakszis 92/3 B IT MAN

PL/SQL Blokkszerkezetű nyelv A következő eszközökkel egészíti ki az SQL-t: változók és típusok vezérlési szerkezetek alprogramok és csomagok kurzorok és kurzorváltozók kivételkezelés objektumorientált eszközök 92/4 B IT MAN

PL/SQL blokk Deklarációs rész Végrehajtási rész (kód rész) Hibakezelő rész DECLARE BEGIN EXCEPTION END; 92/5 B IT MAN

PL/SQL blokk típusok 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. 92/6 B IT MAN

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; 92/7 B IT MAN

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

A PL/SQL alapjai <<korok_beszurasa>> Nevesített blokk, címkével declare pi constant NUMBER(9,7) := 3.1415926; Deklarációk terulet NUMBER(14,2); cursor meret_cursor is SELECT * FROM meretek; meret meret_cursor%rowtype; begin open meret_cursor; loop Utasítások 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; korok sugar terulet 92/9 B IT MAN

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 92/10 B IT MAN

A PL/SQL alapjai Utasítások Üres utasítás: null; Értékadó utasítás: x := 33; Ugró utasítás: goto címke; <<címke>> Elágazások: if-then-else-end if, case Ciklusok: loop 92/11 B IT 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 DECLARE BEGIN EXCEPTION END; 92/12 B IT MAN

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 92/13 B IT 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ó) 92/14 B IT 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 tizedesjegyek darabszáma CHAR: Szöveges érték, opcionálisan kijelölhető a karakterek darabszáma DATE: dátum típus BOOLEAN: logikai adattípus Sok további típus 92/15 B IT 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; 92/16 B IT MAN

DECLARE (példák) Típusmásolással létrehozott változók: Oszlopváltozó: DECLARE v1 tábla.mező%type -- v1 ember.kod%type; A megadott tábla megadott mezőjének típusát veszi fel A3 Kovács B 14 S1 Sorváltozó: DECLARE v2 tábla%rowtype -- v2 ember%rowtype; A megadott tábla rekordszerkezetével megegyező típusú változó Hivatkozás egy elemére: v2.rendszam Kovács B 92/17 B IT MAN A3 14 S1

DECLARE (példák) declare e_r ember%rowtype; begin A3 Kovács B 14 select * into e_r from ember where kod = 'A3'; dbms_output.put_line(e_r.nev); end; S1 DBMS_OUTPUT.PUTLINE Szöveg kiírása a konzolra. 92/18 B IT MAN

A DBMS_OUTPUT csomag A PL/SQL nem tartalmaz I/O utasításokat. Megalkották a DBMS_OUTPUT csomagot, melyben van néhány I/O utasítás. A PUT_LINE utasítás segítségével üzenetet helyezhetünk el egy belső pufferbe. A puffer tartalma megjelenik a képernyőn, ha a SERVEROUTPUT környezeti változó be van kapcsolva: SET SERVEROUTPUT ON 92/19 B IT MAN

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

Autós példa 1. auto rsz tipus szin kor ar 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; 92/21 B IT MAN

Autós példa 2. auto rsz tipus szin kor ar 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; 92/22 B IT MAN

Autós példa 3. auto rsz tipus szin kor ar 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; 92/23 B IT MAN

Autós példa 4. auto rsz tipus szin kor ar 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; naplo adat datum szemely 92/24 B IT MAN

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 92/25 B IT MAN

DBMS_OUTPUT A DBMS_OUTPUT egy ún. Oracle csomag, melyben I/O utasítások találhatók, pl. beolvasás, kiíratás képernyőre A csomag utasításaival lehet üzenetet küldeni a felhasználónak tárolt eljárásból, triggerből. 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 92/26 B IT MAN

DBMS_OUTPUT (Példa) SET SERVEROUTPUT ON ACCEPT nev PROMPT 'Kérem adja meg a nevét: ' DECLARE szoveg varchar2(50); BEGIN szoveg := CONCAT('&nev',' sikeresen végrehajtotta a programot!'); DBMS_OUTPUT.PUT_LINE (szoveg); END; APEX felületen nem működik! szoveg := nev ' sikeresen '; 92/27 B IT MAN

Autós példa 5. auto rsz tipus szin kor ar 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; 92/28 B IT MAN

Autós példa 6. auto rsz tipus szin kor ar 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; AltGr + W 92/29 B IT MAN

A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Eljárások, függvények Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 92/30 B IT MAN

Autós példa 7. auto rsz tipus szin kor ar 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; 92/31 B IT MAN

Autós példa 8. auto rsz tipus szin kor ar 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; 92/32 B IT 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; 92/33 B IT MAN

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; 92/34 B IT 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 return x+5; end; declare x number(6) := 12; begin x := novel5(13); dbms_output.put_line(x); end; 92/35 B IT 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; 92/36 B IT 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); end; begin novelot(27); end; 92/37 B IT MAN

Példa 13. auto rsz tipus szin kor ar 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 92/38 B IT MAN

Példa 13b. auto rsz tipus szin kor ar 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 x int; begin x := maxarfgv; dbms_output.put_line(x); end; select maxarfgv from dual; 92/39 B IT MAN

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 92/40 B IT 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; 92/41 B IT 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; 92/42 B IT 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 rsz_tip('aaa100'); end; begin rsz_tip('jrz932'); end; 92/43 B IT MAN

IF (Példa) Példa logikai változó kezelésére. create or replace procedure logprb is lv boolean := true; begin lv := false; if lv then dbms_output.put_line('igaz'); else dbms_output.put_line('hamis'); end if; end; Fontos! A dbms_output.put_line(lv) utasítás hibás: ORA-00900: invalid SQL statement Ezért nem lehet logikai visszatérő értékű függvényt a select paranccsal hívni! 92/44 B IT MAN

Vezérlési szerkezetek CASE CASE szelektor WHEN {kifejezés feltétel} THEN eredmény WHEN {kifejezés feltétel} THEN eredmény ELSE eredmény END CASE; 92/45 B IT MAN

CASE (Példa) create or replace procedure ma as dayname varchar2(20); napnev varchar2(20); begin select rtrim(to_char(sysdate,'day')) into dayname from dual; case dayname when 'Monday' then napnev := 'Hétfő'; when 'Tuesday' then napnev := 'Kedd'; when 'Wednesday' then napnev := 'Szerda'; when 'Thursday' then napnev := 'Csütörtök'; when 'Friday' then napnev := 'Péntek'; when 'Saturday' then napnev := 'Szombat'; else napnev := 'Vasárnap'; end case; dbms_output.put_line('ma ' napnev ' van.'); end; 92/46 B IT MAN

CASE (Példa) create or replace procedure ma as dayname varchar2(20); napnev varchar2(20):='xxx'; BEGIN select rtrim(to_char(sysdate,'day')) into dayname from dual; napnev:= CASE dayname WHEN 'Monday' THEN 'Hétfő' WHEN 'Tuesday' THEN 'Kedd' WHEN 'Wednesday' THEN 'Szerda' WHEN 'Thursday' THEN 'Csütörtök' WHEN 'Friday' THEN 'Péntek' WHEN 'Saturday' THEN 'Szombat' else 'Vasárnap' END; dbms_output.put_line('ma ' napnev ' van.'); 92/47 B IT MAN END;

Vezérlési szerkezetek - Ciklusok Alap ciklus (LOOP ciklus) WHILE ciklus FOR ciklus 92/48 B IT 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; -- Eredmény: x = 20 92/49 B IT 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; 92/50 B IT 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; -- Eredmény: x = 20 92/51 B IT MAN

While példák Forráskód Create procedure wp_1 as i integer; Begin i := 1; WHILE i < 1 LOOP i := i + 1; dbms_output.put_line(i); END LOOP; dbms_output.put_line('kész'); End; Forráskód Create procedure wp_2 as i integer; Begin i := 1; WHILE i < 60 LOOP i := (i + 1) MOD 60; dbms_output.put_line(i); END LOOP; dbms_output.put_line('kész'); End; Egyszer sem fut le. Végtelen ciklus. 92/52 B IT 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 END LOOP x := x + i; -- Eredmény: x = 55 (1+2+ +10=55) 92/53 B IT MAN

For (példák) Forráskód create or replace procedure fp_1 as x int := 0; Begin FOR i IN 1..10 LOOP x := x + i; END LOOP; dbms_output.put_line('az összeg: ' x); End; Forráskód create or replace procedure fp_1 as x int := 0; Begin FOR i IN 1..100 LOOP x := x + i; if x = 20 then exit; end if; END LOOP; dbms_output.put_line('az összeg: ' x); 92/54 End; B IT MAN

For (példa) Forráskód create or replace procedure fp_1 as x int := 0; Begin FOR i IN 1..100 LOOP x := x + i; if x = 20 then goto c1; end if; END LOOP; <<c1>> dbms_output.put_line('az összeg: ' x); End; 92/55 B IT MAN

For (példa) FOR szam IN 1..500 LOOP INSERT INTO gyokok VALUES (szam, SQRT(szam)); END LOOP; 92/56 B IT MAN

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 92/57 B IT 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; 92/58 B IT MAN

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; 92/59 B IT 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; 92/60 B IT MAN

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 92/61 B IT MAN

Tárolt alprogramok létrehozása Szövegszerkesztő Figyelmeztetés: A függvény létrehozása fordítási hibákkal fejeződött be. Show errors; Szerkesztés 1 2 Text fájl Tárolás az adatbázisban Forráskód Fordítás P-kód Az eljárás létrejött. Futtatás 92/62 B IT 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; 92/63 B IT MAN

Tárolt rutinok kezelése SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') 92/64 B IT 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; 92/65 B IT MAN

Alprogramok paraméterei IN paraméter alapértelmezett OUT paraméter visszatérő értékhez IN OUT 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; 92/66 B IT MAN

Alprogramok paraméterei Példa IN és OUT paraméterre create 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; 92/67 B IT 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; 92/68 B IT 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; Csak IN paraméterek esetén: IN paraméter OUT paraméter IN OUT paraméter DECLARE BEGIN EXCEPTION begin torol(10); end; IN és OUT paraméterek esetén: END; declare vp int; begin negyzet(5, vp); dbms_output.put_line(vp); end; 92/69 B IT 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; END; declare x number(6) := 12; begin x := szindb( piros ); dbms_output.put_line(x); end; Ha a függvény végrehajtási részében DML művelet van, ezt a megoldást kell használni. 92/70 B IT MAN

Órai feladatok Hozza létre a MiniBolt adatbázist: Készítse el a táblákat Töltse fel az adatokat Ellenőrizze a feltöltött adatokat Hozza létre a definiált eljárásokat és függvényeket Segítséget ebben az anyagban talál, a megadott oldalakon, pl: H 30 Ez a dia azért ilyen szörnyű színű, hogy könnyű legyen megtalálni :-) 92/71 B IT MAN

MiniBolt ER modell Kkod Nev Tkod Nev Ar Kategoria K-T Termek Leiras Sorszam Vasarlas Idopont Nev Darab Fkod Leiras Vasarlo V-F FizModok VID Cim 92/72 B IT MAN

MiniBolt struktúra modell Kategoria Kkod Nev Termek Kategoria Tkod Nev Ar Leiras Vasarlas Tkod Sorszam Idopont Darab VID Vasarlo FizModok VID Nev Cim Fizmod Fkod Leiras 92/73 B IT MAN

Órai feladatok 1. Hozzuk létre a táblákat: Create table Kategoria( Kkod char(3) primary key, Nev varchar(20) not null, Unique (Nev)); Select * from user_tables; Create table Termek( Tkod char(3) primary key, Nev varchar(20) not null, Ar int, Leiras varchar(20), Kategoria char(3) not null, Foreign key (Kategoria) references Kategoria(Kkod)); Create table FizModok ( Fkod int primary key, Leiras varchar(20) not null, Unique (Leiras)); 92/74 B IT MAN

Órai feladatok 1. Hozzuk létre a táblákat: Create table Vasarlo ( VID char(3) primary key, Nev varchar(30) not null, Cim varchar(30), Fizmod int not null, Foreign key (Fizmod) references FizModok(Fkod)); create sequence seq_v; Create table Vasarlas( Sorszam int, Idopont timestamp Default Current_Timestamp, Tkod char(3) not null, Darab int, VID char(3) not null, Primary key (Sorszam), Foreign key (Tkod) references Termek(Tkod), Foreign key (VID) references Vasarlo(VID)); 92/75 B IT MAN

Órai feladatok 2. Vigyük 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 fizmodok values (1, 'Bankkártya'); insert into fizmodok values (2, 'Készpénz'); insert into fizmodok values (3, 'Átutalás'); insert into fizmodok values (4, 'Utánvét'); 92/76 B IT MAN

Órai feladatok 2. Vigyük fel az alábbi rekordokat: insert into Vasarlo values('v01', 'Kék Alma', 'Mc. Kék u.12',2); insert into Vasarlo values('v02', 'Zöld Gabi', 'Mc. Hó u.72',3); insert into Vasarlo values('v03', 'Feke Farkas', 'Mc.Kőu.25',1); insert into Vasarlo values('v04', 'Korcs Éva', 'Eger. Lap u.4',1); insert into Vasarlo values('v05', 'Kis Béla', 'Eger. Bé u.9',2); insert into Vasarlo values('v06', 'Kis Jenő', 'Eger. Cé u.11',3); insert into Vasarlo values('v07', 'Kis Noé', 'Eger. Cé u.11',4); insert into Vasarlo values('v08', 'Kis Tas', 'Eger. Cé u.11',1); insert into Vasarlo values('v09', 'Hó Manó', 'Nyék. Tóu.74',2); insert into Vasarlo values('v10', 'Ká Rozi', 'Nyék. Káu.5',3); insert into Vasarlo values('v11', 'Víz Jenő', 'Mc. Útu.39',3); 92/77 B IT MAN

Órai feladatok 2. Vigyük 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'); 92/78 B IT MAN

Órai feladatok 2. Vigyük fel az alábbi rekordokat: insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't14', 1, 'v06'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't15', 1, 'v06'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't16', 1, 'v06'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't03', 4, 'v01'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't04', 1, 'v01'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't02', 2, 'v02'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't06', 2, 'v02'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't07', 4, 'v02'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't08', 1, 'v03'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't09', 1, 'v03'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't11',3, 'v04'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't12', 1, 'v04'); insert into Vasarlas (Sorszam, Tkod, Darab, VID) values(seq_v.nextval, 't13', 100, 'v05'); 92/79 B IT MAN

Órai feladatok 2. Lusta, de okos hallgatóknak 1 2 3 92/80 B IT MAN

Órai feladatok 2. Lusta, de okos hallgatóknak 4 8 9 5 Ctrl V Ctrl 92/81 B IT MAN Ctrl 7 + 6 + + A C

Órai feladatok 2. Lusta, de okos hallgatóknak 10 11 92/82 B IT MAN

Órai feladatok 1-2. Kategoria Kkod Nev 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. HELP: create or replace procedure torol (x in number) as begin delete from auto where kor > x; end; 92/83 B IT MAN

Órai feladatok 3. Kategoria Kkod Nev 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. HELP: create or replace function maxarfgv return int as x int; begin select max(ar) into x from auto; return(x); end; 92/84 B IT MAN

Órai feladatok 4. Kategoria Kkod Nev Készítsen egy UjKategoria2 nevű tárolt eljárást, mely paraméterként megkapja egy új kategória 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. HELP: 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); 92/85end if; B IT MAN end;

Órai feladatok 5. Vasarlo VID Nev Cim Fizmod 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). HELP: 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); 92/86end if; B IT MAN end;

Ó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ívja meg a függvényt a select paranccsal is! HELP: create or replace function maxarfgv return int as x int; begin end; select max(ar) into x from auto; return(x); HELP: declare x number(6) := 12; begin x := novel5(13); dbms_output.put_line(x); end; 92/87 B IT 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 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ívja meg a függvényt! 92/88 B IT 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. 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 92/89 B IT MAN

Órai feladatok 9. 1. Készítsen egy tárolt függvényt, mellyel egy paraméterként megadott maximális árú termékek árát egy szintén paraméterként megadott százalékkal megnöveli. A függvény az érintett termékek darabszámát adja vissza eredményül. 2. Gondoskodjon arról (külön eljárások segítségével), hogy egy elhibázott áremelés után, a termékek ára visszaállítható legyen. 92/90 B IT 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) 92/91 B IT MAN

VÉGE VÉGE 92/92 B IT MAN