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

Hasonló dokumentumok
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:

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

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

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

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

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

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

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

Haladó DBMS ismeretek 1

Kivételkezelés 2. SQLCODE lehetséges értékei:

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

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

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

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

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

Tranzakciókezelés PL/SQL-ben

Együttes hozzárendelés

Adatbázis rendszerek SQL nyomkövetés

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

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

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

Adatbázis Rendszerek II. 3. SQL alapok

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

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

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

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

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

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

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

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

SQL DDL-2 (aktív elemek) triggerek

PL/SQL feladatok 8. gyakorlat

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

Az SQL adatbázisnyelv: DML

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:

Kliens oldali SQL-API

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

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

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ázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

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];

Bevezetés: az SQL-be

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

Adatbázisban tárolt kollekciók

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

SQL/PSM kurzorok rész

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

Adatbázisok* tulajdonságai

Tankönyvben: SQL/PSM Gyakorlaton: Oracle PL/SQL

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

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

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

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

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

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

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.

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

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

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

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

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ázisok elmélete 9. előadás

Database Systems II. ZH összefoglaló

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázis használat I. 5. gyakorlat

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

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

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

ADATBÁZIS RENDSZEREK I BEADANDÓ

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

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

SQL OO elemei aktív komponensek

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

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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek

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

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Adattípusok. Max. 2GByte

Adatbázis-kezelés. 3. Ea: Viszonyított betűszámtan (2013) Relációs algebra alapok (átgondolt verzió) v: Szűcs Miklós - ME, ÁIT. 1.

Adattípusok. Max. 2GByte

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

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

LBRA6i integrált rendszer

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ázisok II. Jánosi-Rancz Katalin Tünde 327A

Adatbázisok webalkalmazásokban

SQLServer. DB Recovery modes

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

ELTE SAP Excellence Center Oktatóanyag 1

Java és web programozás

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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 2. Előadás: Tárolt eljárások

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

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

Pénzügyi algoritmusok

Átírás:

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

A PL/SQL alapjai Adatok kezelése Kurzorok Hibakezelés 53/2 B IT MAN

Adatok kezelése PL/SQL-ben Műveletek: Írás (INSERT) Módosítás (UPDATE) Törlés (DELETE) Olvasás (SELECT INTO) Információforrás: Adatbázis adatai PL/SQL-blokk változók INSERT UPDATE DELETE SELECT 53/3 B IT MAN

Adatok kezelése - Írás INSERT utasítással Formátuma megegyezik az SQL szabványban megismerttel, de bővíthető a returning kifejezéssel! Mezőértékek megadásánál szerepelhetnek PL/SQL változók Példa: x := 3; y := 'alma'; INSERT INTO gyumi VALUES (x, y, 4); 53/4 B IT MAN

Adatok kezelése - Törlés DELETE utasítással Formátuma megegyezik az SQL szabványban megismerttel, de bővíthető a returning kifejezéssel! PL/SQL változók helye: Példa: x := 3; Értékkifejezésben Feltételi részben DELETE FROM gyumi WHERE id = x; 53/5 B IT MAN

Adatok kezelése - Módosítás UPDATE utasítással Formátuma megegyezik az SQL szabványban megismerttel, de bővíthető a returning kifejezéssel! PL/SQL változók helye: Értékkifejezésben Feltételi részben Példa: x := 3; y := 43; UPDATE gyumi SET kor = y WHERE id = x; 53/6 B IT MAN

Returning utasításrész Egysoros, egyszerűsített SELECT.. INTO kifejezés A select parancs nincs kiírva Az adatok mindig az érintett táblából származnak Az into előtti mezőlistának meg kell egyeznie az into utáni változó listával declare v_nev varchar2(20); delete from termek where tkod='t07' returning nev into v_nev; dbms_output.put_line('a törölt termék neve: ' v_nev); Termek Kategoria Tkod Nev Ar Leiras 53/7 B IT MAN

Adatok kezelése returning kifejezés create sequence seq1; create table T4 (kod int, adat varchar2(40)); create trigger t4t1 before insert on t4 for each row :new.kod := seq1.nextval; T4 kod adat declare a int; insert into t4 (adat) values ('Tulipán') returning kod into a; dbms_output.put_line('a rekord kódja: ' a); 53/8 B IT MAN

Adatok kezelése returning kifejezés create or replace procedure updterm (maxar in number, szaz in number, db out number) is update termek set ar=ar*(1+szaz/100) where ar < maxar returning count(*) into db; declare x int; updterm (200, 7, x); dbms_output.put_line('módosított termékek száma: ' x); 53/9 B IT MAN

Adatok kezelése Lekérdezés SELECT INTO utasítással INTO kulcsszó után változólista: PL/SQL változók A lekérdezés eredménye kerül bele A listában több változót is fel lehet sorolni (projekciós részben szereplő mezők számával megegyezően) Egyelemű (rekordtípusú - %ROWTYPE) Akkor alkalmazható, ha az eredmény pontosan egy rekordból áll. (Kell, hogy értéket kapjon, és nem kaphat több értéket!) 53/10 B IT MAN

Adatok kezelése Lekérdezés (Példa) declare egyed ember%rowtype; nev char(20); select * into egyed from ember where id = 2345; nev := egyed.nev; dbms_output.put_line(nev); 53/11 B IT MAN

Adatok kezelése Lekérdezés (Példa) declare enev char(20); ekor int; select nev, kor into enev, ekor from ember where id = 2345; dbms_output.put_line(enev, ekor); 53/12 B IT MAN

A PL/SQL alapjai Adatok kezelése Kurzorok Hibakezelés 53/13 B IT MAN

Kurzor Az adatok kezelésére használt memóriarészt környezeti területnek nevezi az Oracle. A kurzor olyan eszköz, amivel megnevezhetjük a környezeti területet, hozzáférhetünk az ott lévő adatokhoz. Az Oracle kétféle kurzort használ: Implicit kurzor: az Oracle automatikusan hozza létre, és kezeli minden DML művelet esetén, akkor is, ha csak egy sort érint a művelet. Ez a típus rejtett, nem láthatók a benne lévő adatok. Explicit kurzor: a felhasználó a programjában deklarálja, és kezeli. A kurzor megnyitható, a benne lévő adatok elérhetők, kiolvashatók belőle. A kurzor mindig egy select parancs eredményeként jön létre. 53/14 B IT MAN

Implicit kurzor Az implicit kurzor neve mindig sql! Használható attribútumok: - %found Van benne adat? - %notfound Nincs benne adat? - %isopen Nyitva van? (False) - %rowcount Feldolgozott sorok száma declare sordb number(5); update dolgozok set fizetes = fizetes + 5000; if sql%notfound then dbms_output.put_line('a dolgozók tábla üres'); elsif sql%found then sordb := sql%rowcount; dbms_output.put_line(sordb ' dolgozó fizetése frissítve'); end if; 53/15 B IT MAN

Explicit kurzor declare c_id dolgozok.id%type; c_nev dolgozok.nev%type; c_cim dolgozok.cim%type; Az explicit kurzornak mi adunk nevet! Használható attribútumok: - %found Van benne adat? - %notfound Nincs benne adat? - %isopen Nyitva van? - %rowcount Feldolgozott sorok száma cursor c_dolgozok is select id, nev, cim from dolgozok; open c_dolgozok; loop fetch c_dolgozok into c_id, c_nev, c_cim; exit when c_dolgozok%notfound; dbms_output.put_line(c_id '-' c_nev '-' c_cim); end loop; close c_dolgozok; 53/16 B IT MAN

Adatok kezelése Kurzor Több rekordot visszaadó lekérdezés esetén használandó az explicit kurzor. Életciklusa: 1. Kurzor deklaráció (DECLARE részben) 2. Kurzor megnyitás 3. Rekord kiolvasások ciklusa 4. Kurzor lezárás Nem DECLARE OPEN FETCH Üres? Igen CLOSE 53/17 B IT MAN

Kurzor attribútumok %ROWCOUNT Értéke az adott pillanatig beolvasott rekordok száma. %FOUND Értéke TRUE, ha az adott FETCH utasítás még talál benne rekordot. %NOTFOUND Értéke TRUE, ha az adott FETCH utasítás már nem talál benne rekordot. %ISOPEN Értéke TRUE, ha a kurzor nyitott. 53/18 B IT MAN

Adatok kezelése Kurzor (elvi példa) declare cursor cursornév(paraméterek) is select ; vlista cursornév%rowtype; open cursornév(akt_param); loop fetch cursornév into vlista; exit when cursornév%notfound; adatok kiírása, feldolgozása end loop; close cursornév; Kurzor deklarálása Megnyitás Kiolvasás Lezárás 53/19 B IT MAN

Adatok kezelése Kurzor példa A kurzor működése create or replace procedure tlp as cursor cur is select * from kategoria; cv cur%rowtype; open cur; loop fetch cur into cv; exit when cur%notfound; dbms_output.put_line('név: ' cv.nev); dbms_output.put_line('feldolgozva: ' cur%rowcount); end loop; close cur; 53/20 B IT MAN

Adatok kezelése Kurzor példa Adott nap előtt születettek beszúrása egy másik táblába: declare cursor lista (datum date) is select nev, lakcim from szemelyek where szuldat < datum; c1 lista%rowtype; open lista('2000-01-01'); loop fetch lista into c1 exit when lista%notfound; insert into szemelyek2 values(c1.nev, c1.lakcim); end loop; close lista; 53/21 B IT MAN

Adatok kezelése Kurzor példa FOR ciklussal A kurzor működése create or replace procedure tlp as cursor cur is select * from kategoria; for cv in cur loop dbms_output.put_line('név: ' cv.nev); dbms_output.put_line('feldolgozva: ' cur%rowcount); end loop; Csak a kurzort kell deklarálni, nem kell változó a kiolvasáshoz Nem kell megnyitni a kurzort A fetch automatikusan zajlik Nem kell lezárni a kurzort 53/22 B IT MAN

Autós példa 19. auto rsz tipus szin kor ar PL/SQL blokk írása a piros autók lekérdezésére és külön táblában eltárolására. declare x auto%rowtype; cursor piros is select * from auto where szin like 'piros%'; open piros; loop fetch piros into x; exit when piros%notfound; insert into piros_auto values (x.rsz, x.tipus, x.szin, x.kor, x.ar); end loop; close piros; 53/23 B IT MAN

Autós példa 20. auto rsz tipus szin kor ar PL/SQL blokk írása a piros autók lekérdezésére és külön táblában eltárolására, de: FOR ciklussal! declare cursor piros is select * from auto where szin like 'piros%'; for ps in piros loop insert into piros_auto values (ps.rsz, ps.tipus, ps.szin, ps.kor, ps.ar); end loop; 53/24 B IT MAN

Adatok kezelése Módosítható KURZOR SELECT utasítás végére opcionális tag: FOR UPDATE OF mezolista Módosításkor az UPDATE utasítás feltételi részében: CURRENT OF kurzornév A kurzor munkarekordjának adott mezőértékei az eredeti táblában is módosulni fognak. 53/25 B IT MAN

Módosítható KURZOR auto rsz tipus szin kor ar Adott színű autók árának növelése adott százalékkal. create procedure aut_arnov(szinbe in char, ert in int) is cursor cur_a is select * from auto where szin=szinbe for update of ar; a cur_a%rowtype; open cur_a; loop fetch cur_a into a; exit when cur_a%notfound; update auto set ar=a.ar*(1+ert/100) where current of cur_a; end loop; close cur_a; aut_arnov('piros', 10); 53/26 B IT MAN

Módosítható KURZOR auto rsz tipus szin kor ar Adott színű autók árának növelése adott százalékkal, függvénnyel, for ciklussal. create or replace function aut_arnov2 (szinbe in char, ert in int) return number as cursor cur_a is select * from auto where szin=szinbe for update of ar; db number := 0; for cv in cur_a loop update auto set ar=cv.ar*(1+ert/100) where current of cur_a; db:=db+1; end loop; return db; select aut_arnov2('piros', 10) from dual; declare x number(6) := 0; x:=aut_arnov2('piros', 10); dbms_output.put_line(x); 53/27 B IT MAN

Módosítható KURZOR auto rsz tipus szin kor ar Adott színű autók árának növelése adott százalékkal. create or replace procedure aut_arnov3 (szinbe in char, ert in int) is cursor cur_a is select * from auto where szin=szinbe for update of ar; db number:=0; for cv in cur_a loop update auto set ar=cv.ar*(1+ert/100) where current of cur_a; db:=cur_a%rowcount; end loop; dbms_output.put_line('árváltozás: ' db); aut_arnov3('piros', 10); 53/28 B IT MAN

A PL/SQL alapjai Adatok kezelése Kurzorok Hibakezelés 53/29 B IT MAN

PL/SQL blokkok hibakezelése Deklarációs rész Végrehajtási rész (kód rész) Hibakezelő rész DECLARE BEGIN EXCEPTION END; 53/30 B IT MAN

PL/SQL blokkok hibakezelése A futási időben bekövetkező hibák hibaüzeneteket váltanak ki A hibák lekezelésére vannak beépített (előre definiált) hiba típusok, de írhatunk saját (felhasználó által definiált) típusokat is. Minden hibának van kódja és szövege, pl: ORA-01403 - NO_DATA_FOUND ORA-01722 INVALID_NUMBER A lekezelt hibákat kivételeknek hívjuk, emiatt nevezik a hibakezelést kivételkezelésnek is. 53/31 B IT MAN

Kivételek típusai Előre definiált beépített kivételek Az általában előforduló hibákra vannak kivételek Definiálható beépített kivételek Ugyanúgy működnek, mint az előre definiált hibák, de a felhasználó alakítja ki őket Hibakódjuk -20000 és -20999 között lehet, szövegük megadható Meghívásuk: raise_application_error eljárással Speciális esetekhez, program magyarításhoz Felhasználói kivételek Nem hibának tűnnek, hanem felhasználói üzenetnek 53/32 B IT MAN

Autós példa 14. auto rsz tipus szin kor ar Próbáljuk meg lekérdezni az ABC-500 rendszámú autó típusát. Nézzük mi történik, ha nincs ilyen rendszám! declare x auto.tipus%type; select tipus into x from auto where rsz='abc-500'; dbms_output.put_line('az autó típusa: ' x); www.bitman.hu 53/33 B IT MAN

Autós példa 14. auto rsz tipus szin kor ar Próbáljuk meg lekérdezni az ABC-500 rendszámú autó típusát. Ha nincs ilyen rekord a táblában, figyelmeztessük a felhasználót. declare x auto.tipus%type; select tipus into x from auto where rsz='abc-500'; dbms_output.put_line('az autó típusa: ' x); exception when no_data_found then dbms_output.put_line('nincs ilyen rendszám!'); www.bitman.hu 53/34 B IT MAN

Autós példa 16. auto rsz tipus szin kor ar Próbáljuk meg lekérdezni, és egy táblába beszúrni a piros autó adatait. Nézzük mi történik, ha több ilyen rekord is van a táblában. declare x auto%rowtype; select * into x from auto where szin like 'piros%'; insert into piros_auto values(x.rsz, x.tipus, x.szin, x.kor, x.ar); www.bitman.hu 53/35 B IT MAN

Autós példa 16. auto rsz tipus szin kor ar Próbáljuk meg lekérdezni, és egy táblába beszúrni a piros autó adatait. Ha több ilyen rekord is van a táblában, figyelmeztessük a felhasználót. declare x auto%rowtype; select * into x from auto where szin like 'piros%'; insert into piros_auto values(x.rsz, x.tipus, x.szin, x.kor, x.ar); exception when too_many_rows then dbms_output.put_line('több piros autó is van!'); www.bitman.hu 53/36 B IT MAN

Előre definiált hibák kezelése declare v_ber melos.ber%type; v_veznev melos.vezeteknev%type; v_kernev melos.keresztnev%type; v_ber := 200000; select vezeteknev, keresztnev into v_veznev, v_kernev from melos where ber = v_ber; dbms_output.put_line(v_veznev ' ' v_kernev); exception when no_data_found then dbms_output.put_line('nincs ilyen fizetés'); when too_many_rows then dbms_output.put_line('több embernek is ez a fizetése'); when others then dbms_output.put_line('egyéb hiba'); 53/37 B IT MAN

Autós példa 17. Írjunk olyan pl/sql blokkot, amely a felhasználó által definiált beépített hiba segítségével nem engedi felvinni a 20 évnél idősebb autókat. declare rsz varchar2(30) := 'SQW-123'; tipus varchar2(30) := 'skoda'; szin varchar2(30) := 'fehér'; kor number(2) := 22; ar number(8) := 400000; if kor not between 1 and 20 then raise_application_error (-20502, 'Hibás az autó kora!'); else insert into auto values(rsz, tipus, szin, kor, ar); end if; www.bitman.hu 53/38 B IT MAN

Autós példa 18. Írjunk olyan pl/sql blokkot, amely saját magunk által definiált hiba segítségével nem engedi felvinni a 20 évnél idősebb autókat. declare rsz varchar2(30) := 'SQW-123'; tipus varchar2(30) := 'skoda'; szin varchar2(30) := 'fehér'; kor number(2) := 22; ar number(8) := 400000; rossz_kor exception; if kor not between 1 and 20 then raise rossz_kor; else insert into auto values(rsz,tipus,szin,kor,ar); end if; exception when rossz_kor then dbms_output.put_line('hibás az autó kora'); www.bitman.hu 53/39 B IT MAN

A hibakezelés logikája 1 1 2 3 DECLARE saját_hiba EXCEPTION; BEGIN EXCEPTION WHEN saját_hiba THEN WHEN beépített_hiba THEN WHEN OTHERS THEN END; 53/40 B IT MAN

Előre definiált (beépített) kivételek Hiba neve Hiba kódja access_into_null ORA-06530 case_not_found ORA-06592 collection_is_null ORA-06531 cursor_already_open ORA-06511 dup_val_on_index ORA-00001 invalid_cursor ORA-01001 invalid_number ORA-01722 login_denied ORA-01017 no_data_found ORA-01403 not_logged_on ORA-01012 program_error ORA-06501 rowtype_mismatch ORA-06504 self_is_null ORA-30625 storage_error ORA-06500 subscript_beyond_count ORA-06533 subscript_outside_limit ORA-06532 sys_invalid_rowid ORA-01410 timeout_on_resource ORA-00051 too_many_rows ORA-01422 value_error ORA-06502 zero_divide ORA-01476 53/41 B IT MAN

Autós példa 19. Tárolt alprogram, mely töröl egy paraméterként megadott rendszámú autót, ha nincs olyan rendszám, akkor egy üzenetet ír a képernyőre! create or replace procedure del_rsz (rszb in char) as db number; h_rsz exception; select count(*) into db from auto where rsz=rszb; if db=0 then raise h_rsz; else delete from auto where rsz=rszb; end if; exception when h_rsz then dbms_output.put_line('hibás rendszám'); del_rsz( bbrbr ); end 53/42 B IT MAN

Autós példa 19. Tárolt alprogram, mely töröl egy paraméterként megadott rendszámú autót, ha nincs olyan rendszám, akkor egy üzenetet ír a képernyőre! create or replace procedure del_rsz (rszb in char) as delete from auto where rsz=rszb; if sql%rowcount = 0 then dbms_output.put_line('hibás rendszám'); end if; del_rsz( bbrbr ); end 53/43 B IT MAN

Órai feladatok 1. Kategoria Kkod Nev Termek Kategoria Tkod Nev Ar Leiras Készítsen egy TermekKategoria nevű eljárást, mely kiírja a képernyőre a termékek nevét és kategóriájuk nevét. Használjon kurzort és for ciklust. HELP: create or replace procedure tlp as cursor cur is select * from kategoria; for cv in cur loop dbms_output.put_line('név: ' cv.nev); end loop; 53/44 B IT MAN

Órai feladatok 2. Készítsen egy TermekAr nevű tárolt eljárást, mely egy paraméterként megadott terméknév esetén kiírja a termék árát. Használjon gyári hibakezelést. Ha nincs ilyen termék, íja ki a képernyőre (Nem létező termék: terméknév). Ha több ilyen termék is van (pl. csipsz), íja ki a képernyőre (Több ilyen nevű termék létezik: terméknév). 53/45 B IT MAN

Órai feladatok 2. Készítsen egy TermekAr nevű tárolt eljárást, mely egy paraméterként megadott terméknév esetén kiírja a termék árát. Használjon gyári hibakezelést. Ha nincs ilyen termék, íja ki a képernyőre (Nem létező termék: terméknév). Ha több ilyen termék is van (pl. csipsz), íja ki a képernyőre (Több ilyen nevű termék létezik: terméknév). HELP: v_ber := 200000; select vezeteknev, keresztnev into v_veznev, v_kernev from melos where ber = v_ber; dbms_output.put_line(v_veznev ' ' v_kernev); exception when no_data_found then dbms_output.put_line('nincs ilyen fizetés'); when too_many_rows then dbms_output.put_line('több embernek is ez a fizetése'); 53/46 B IT MAN

Órai feladatok 3. Készítsen egy TermekLista nevű eljárást, mely egy paraméterként megadott kategória kód esetén kiírja a képernyőre a kategóriához tartozó termékek nevét. Az eljárás bemenő paramétere legyen a kategória neve (nem a kódja!) Használjon kurzort. Készítsen kétféle változatot, az egyikben loop ciklust, a másikban for ciklust használjon. Módosítás: A for ciklusos változatot egészítse ki hibakezeléssel: ha nem létezik a megadott kategória, írja ki ennek tényét az eljárás a képernyőre. Módosítás: Hozzon létre egy hiba_naplo [szöveg, dátum, szöveg] táblát, és ne a képernyőre, hanem ebbe írja a hibát, a dátumot, és a usernevet. (Hibás kategória: kategória neve, dátum, user) 53/47 B IT MAN

Órai feladatok 4. Készítsen egy VasarloLista nevű eljárást, mely egy paraméterként megadott terméknév esetén kiírja a képernyőre azon vásárlók nevét, akik már vásároltak a termékből. Használjon kurzort. Módosítás: Egészítse ki az eljárást hibakezeléssel: ha nem létezik a megadott termék, írja ki ennek tényét az eljárás a képernyőre. Módosítás: Naplózza a hibát a hiba_naplo [szöveg, dátum, szöveg] táblába. (Hibás terméknév: terméknév, dátum, user) 53/48 B IT MAN

Órai feladatok 5. Készítsen egy Bevetel nevű függvényt, amely kiszámítja, és visszatérő értékként visszaadja a bevételt. (termékár * darab) A függvény paramétere legyen a vásárlás táblában lévő dátum és sorszám. A függvény az adott napi, adott sorszámtól kisebb sorszámú tételekből számítsa a bevételt. Használjon kurzort, melybe az adott sorszámnak eleget tevő rekordokból az ár és a darabszám kerüljön. Ciklussal összesítse a bevételt a kurzort felhasználva. Hívja meg az elkészült függvényt a select paranccsal. Módosítás: egészítse ki hibakezeléssel a függvényt. Ha nem létező dátumot adunk meg, írja ki a függvény: (Nem létező dátum: dátum!) 53/49 B IT MAN

Órai feladatok 6. Készítsen egy Arnovelo nevű tárolt alprogramot, mely egy paraméterként megadott kategória esetén megemeli az adott kategóriájú termékek árát egy szintén paraméterként megadott százalékkal. Az eljárás bemenő paramétere legyen a kategória neve (nem a kódja!), és a százalék értéke (pl. 10%). Használjon módosítható kurzort. 53/50 B IT MAN

Órai feladatok 7. Készítsen egy UjTermek nevű tárolt eljárást, mely: - az egyes mezők értékét paraméterként kapja meg, - saját hibát dobva figyelmeztet (képernyőüzenettel), ha nem létező kategóriájú terméket akarnánk felvinni, - saját hibát dobva figyelmeztet (képernyőüzenettel), ha már létező azonosítójú terméket akarnánk felvinni. 53/51 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) 53/52 B IT MAN

VÉGE VÉGE 53/53 B IT MAN