1 / 24

Adatbázis rendszerek II

Adatbázis rendszerek II. Kovács László. Az SQL procedurális kiegészítése PL/SQL. Az SQL korlátai. Az SQL nyelv az adatbázis manipulálásra szolgálnak, nem tartalmaz: - változó kezelést - vezérlési elemeket - file IO - képernyő kezelés - hibakezelés .

neal
Download Presentation

Adatbázis rendszerek II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Adatbázis rendszerek II Kovács László Az SQL procedurális kiegészítése PL/SQL

  2. Az SQL korlátai Az SQL nyelv az adatbázis manipulálásra szolgálnak, nem tartalmaz: - változó kezelést - vezérlési elemeket - file IO - képernyő kezelés - hibakezelés ... Nem programozási nyelv, nem is arra használjuk. De néha jó lenne, ha mégis az lenne,...

  3. Üzleti logika elhelyezése adatbázis Kliens üzleti logika Nagy hálózati forgalom Decentralizált karbantartás Lassabb végrehajtás Kliens Adatbázis üzleti logika Kis hálózati forgalom Centralizált karbantartás Gyorsabb végrehajtás

  4. Üzleti logika és adatbázis integrálása Az üzleti logika procedurális nyelven definiált. Alkalmazható programozási nyelvek: - külső (pl. java, C) - saját - SQL/kiegészítés Külső: alkalmazzák (pl. Postgres) +: ismert, sok funkció -: laza integráció,védelem Saját: ritkán alkalmazzák (pl. VFP) +: testre szabható -: új ismereteket igényel, zártság SQL kiegészítés: sokan alkalmazzák (pl. Oracle, SQLServer) +: szoros integráció -: sok új elem van a nyelvben, zártság

  5. PL/SQL alapjai PL/SQL: az Oracle SQL kiegészítése a procedurális elemeket definiálására A PL/SQL kódok építő köve a PL/SQL blokk DECLARE Deklarációs rész BEGIN Törzs, kód rész blokk EXCEPTION A blokk még nem adatbázis objektum (pl. nincs neve) Hiba kezelő rész END

  6. PL/SQL alapjai A PL/SQL blokk felhasználása Tárolt eljárás PL/SQL blokk Tárolt függvény Triggerek JOB Közvetlen futtatás

  7. Tárolt eljárások, PL/SQL elemei A tárolt eljárások DB objektumként védhető, karbantartható CREATE OR REPLACE PROCEDURE név (pnev1 IN | OUT típus1,… ) AS PL/SQL blokk Paramétereknél: IN: bemenő paraméter OUT: értéket kap, amit kinn is látni kellene Elindítása: EXECUTE név (param1, ..) Megszüntetése: DROP PROCEDURE név

  8. KÉP Thom Evans (?): Repetition

  9. Programozási elemek A deklarációs rész felépítése adattípus DECLARE nev CHAR(10); kor NUMBER(5,1) := 12; tip CONSTANT CHAR(2) := ‘AL’; ig EMBER.IGSZ%TYPE; auto AUTO%ROWTYPE; kezdőérték konstans érték DB tábla megadott mezőjének típusát veszi fel rekord típus, DB tábla rekordtípusát veszi fel változó neve KL KL

  10. Alap adattípusok BINARY_INTEGER: egész, bináris, +/-214783647-ig NUMBER(n,m): valós, számjegyes CHAR(n): szöveg VARCHAR2(n): változó méretű szöveg BOOLEAN: logikai DATE: dátum, idő RAW: bináris LONG: hosszú szöveg(2GB) LONG RAW: hosszú bináris(2GB) declares1 char(5) := '12'; s2 char(5) := '12 '; => s1 = s2 ist TRUE declares1 varchar2(5) := '12'; s2 varchar2(5) := '12 '; => s1 = s2 ist FALSE

  11. Alap operátorok Operátorok prioritási táblázata NOT, ** +, - (előjelek) /, * +, -, || =, !=, <, >, <=, >=, IS NULL,LIKE,BETWEEN,IN AND OR Néhány függvény Szöveg : upper(), initcap(), substr(), length(), rtrim() dátum : sysdate, to_date(), to_char(), t_number() numerikus : abs(), mod(), round() ...

  12. Programozási elemek A törzs rész felépítése értékadás BEGIN nev := ‘mars’; IF x > 4 THEN .. ELSE .. END IF; UPDATE auto SET ar = x WHERE …; SELECT ar,ig,.. INTO x, y.. FROM .. NULL; .. END feltételes végrehajtás SQL parancsok gazdanyelvi változó Egy rekord lekérdezése gazdanyelvi változóba Üres parancs KL KL

  13. Programozási elemek A törzs rész felépítése BEGIN LOOP .. EXIT [WHEN felt]; END LOOP; WHILE x < 2 LOOP .. END LOOP; FOR x IN [REVERSE] … LOOP .. END LOOP; … END; alapciklus kilépés [feltétel esetén] feltételes ciklus léptetéses ciklus Egy halmaz elemeire

  14. Programozási elemek Többszörös elágazás BEGIN .. CASE WHEN feltétel THEN tevékenység; WHEN feltétel THEN BEGIN tevékenység; END; ELSE tevékenység; END CASE; .. END elágazás rész nyitása egy feltétel ág tevékenység blokk egyéb ág elágazás rész zárása

  15. Programozási elemek Kurzor szerkezet, több rekord beolvasása a DB-ből DECLARE CURSOR cnev(param) IS SELECT ..; BEGIN OPEN cnev(aparam); LOOP FETCH cnev INTO vlista; EXIT WHEN cnev%NOTFOUND; END LOOP; CLOSE cnev; deklaráció, paraméterrel nyitás rekord olvasás kilépés a ciklusból lezárás DBMS PL/SQL blokk kurzor

  16. Programozási elemek Közvetlen kurzorkezelési ciklus DECLARE CURSOR cnev(param) IS SELECT ..; BEGIN OPEN cnev(aparam); FOR c1 IN cnec LOOP x := c1.mezo1; ... END LOOP; CLOSE cnev; deklaráció, paraméterrel nyitás ciklus Hivatkozás egy mezőre lezárás

  17. Programozási elemek Hibakezelés saját hibakód deklarálás DECLARE hnev EXCEPTION; hiba explicit generálása BEGIN RAISE hnev ; EXCEPTION WHEN hiba THEN ….. WHEN OTHERS THEN …. hiba azonosítása hibakezelő rutin egyéb hibák kezelése

  18. Hibakódok no-data-found : nincs több adat Cursor-already-open : már nyitott a kurzor Dup-val-On-index : kulcs dupplikálás Storage-error : memória hiba Program-error : pl/SQL motor hiba Zero-divide : nullával való osztás invalid-cursor : nem élő kurzor Login-denied : érvénytelen bejelentkezés Invalid-number : adattípus hiba Too-many-rows : több mint egy eredményrekord

  19. Minta kód DECLARE v_KOD varchar2(10); v_NEV varchar2(40);BEGIN v_KOD := 'kg'; v_NEV := 'Kilogramm'; insert into MERTEKEGYSEG (KOD, NEV) values (v_KOD, v_NEV);EXCEPTION when DUP_VAL_ON_INDEX then update MERTEKEGYSEG set NEV = v_NEV where KOD = v_KOD;END; egy megadott (KÓD, NEV) rekord felvitele a MERTEKEGYSEG táblába; Létező kód esetén felülírja a létező rekord NEV mezőjét.

  20. Minta kód declare function LETEZIK (p_KOD in varchar2)return boolean is v_DB integer; begin select count(*) into v_DB from MERTEKEGYSEG where KOD = p_KOD; return v_DB > 0; end; begin if not LETEZIK ('m') then insert into MERTEKEGYSEG (KOD, NEV) values (‘m', 'Meter'); end if; end; Beépített függvény, amely ellenőrzi, hogy a megadott KOD érték már létezik-e vagy sem

  21. Minta kód DECLARE e_rec emp%ROWTYPE; e1 EXCEPTION; sal1 emp.sal%TYPE; BEGIN SELECT sal INTO sal1 FROM emp WHERE deptno = 30 AND ename = 'John'; IF sal1 < 5000 THEN RAISE e1; sal1 := 8500; UPDATE emp SET sal = sal1 WHERE deptno = 30 AND ename = 'John'; END IF; EXCEPTION WHEN no_data_found THEN RAISE_APPLICATION_ERROR (-20001, 'John távol van'); WHEN e1 THEN RAISE_APPLICATION_ERROR (-20002, ’Less Salary.'); END;

  22. kép Thom Evans: Whispers

  23. Adatkezelés speciális elemei • FOR UPDATE • Dinamikus kurzor • FOR - kurzor • Blokkok egymásba ágyazása • Saját hibatípus

  24. Thom Evans: My new hat

More Related