Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatbázis rendszerek II Kovács László A PL/SQL nyelv további elemei.

Hasonló előadás


Az előadások a következő témára: "Adatbázis rendszerek II Kovács László A PL/SQL nyelv további elemei."— Előadás másolata:

1 Adatbázis rendszerek II Kovács László A PL/SQL nyelv további elemei

2 Adattípusok A PL/SQL adattípusai igazodnak az Oracle DBMS adattípusaihoz. adattípus gyári saját halmaz rekord UDT VARRAY TABLE RECORD más típusokra hivatkozik numerikus szöveges dátum bináris logikai hagyományos relációs adattípusok NUMERIC INTEGER … CHAR VARCHAR… DATE RAW BOOELAN

3 Adattípusok Rekord adattípus Több (esetleg különböző) típusú adatelemek együttese Fix méret Adatbázisba közvetlenül nem tárolható le Tábla rekordnak felel meg (SELECT, INSERT, UPDATE-ben felhasználható)

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 SQL kiegészítés: sokan alkalmazzák (pl. Oracle, SQLServer) +: szoros integráció -: sok új elem van a nyelvben, zártság Saját: ritkán alkalmazzák (pl. VFP) +: testre szabható -: új ismereteket igényel, 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 Hiba kezelő rész Törzs, kód rész Deklarációs rész blokk DECLARE BEGIN EXCEPTION END A blokk még nem adatbázis objektum (pl. nincs neve)

6 PL/SQL alapjai A PL/SQL blokk felhasználása PL/SQL blokk Tárolt eljárás 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 EXECUTE név (param1,..) Elindítása: Megszüntetése: DROP PROCEDURE név

8 KÉP Thom Evans (?): Repetition

9 Programozási elemek KL DECLARE nevCHAR(10); kor NUMBER(5,1) := 12; tip CONSTANT CHAR(2) := ‘AL’; igEMBER.IGSZ%TYPE; auto AUTO%ROWTYPE; A deklarációs rész felépítése változó neve adattípus 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

10 Alap adattípusok BINARY_INTEGER: egész, bináris, +/ 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) declare s1 char(5) := '12'; s2 char(5) := '12 '; => s1 = s2 ist TRUE declare s1 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 KL 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 A törzs rész felépítése értékadás feltételes végrehajtás gazdanyelvi változó SQL parancsok Egy rekord lekérdezése gazdanyelvi változóba Programozási elemek Üres parancs

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

14 Többszörös elágazás Programozási elemek 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 DBMS PL/SQL blokk kurzor 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

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

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

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_einheit_kurz varchar2(10); v_bezeichnung varchar2(40); BEGIN v_einheit_kurz := 'kg'; v_bezeichnung := 'Kilogramm'; insert into einheit (einheit_kurz, bezeichnung) values (v_einheit_kurz, v_bezeichnung); EXCEPTION when DUP_VAL_ON_INDEX then update einheit set bezeichnung = v_bezeichnung where einheit_kurz = v_einheit_kurz; END;

20 declare function einheit_existiert (p_einheit_kurz in varchar2) return boolean is v_anzahl pls_integer; begin select count(*)into v_anzahl from einheit where einheit_kurz = p_einheit_kurz; return v_anzahl > 0; end; begin if not einheit_existiert ('m') then insert into einheit (einheit_kurz, bezeichnung) values (m', 'Meter'); end if; end; Minta kód

21 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; Minta kód

22 kép Thom Evans: Whispers

23 Adatkezelés speciális elemei -

24 Thom Evans: My new hat


Letölteni ppt "Adatbázis rendszerek II Kovács László A PL/SQL nyelv további elemei."

Hasonló előadás


Google Hirdetések