Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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. NUMERIC numerikus INTEGER … CHAR szöveges hagyományos relációs adattípusok VARCHAR… gyári dátum DATE bináris RAW adattípus logikai BOOELAN VARRAY más típusokra hivatkozik halmaz TABLE saját rekord RECORD UDT
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 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 Hiba kezelő rész A blokk még nem adatbázis objektum (pl. nincs neve) END
6
PL/SQL alapjai A PL/SQL blokk felhasználása 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 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 változó neve rekord típus, DB tábla rekordtípusát veszi fel 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) 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
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 FOR x IN [REVERSE] … 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 .. elágazás rész nyitása
CASE WHEN feltétel THEN tevékenység; WHEN feltétel THEN 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 DECLARE hnev EXCEPTION; saját hibakód deklarálás 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_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
Minta kód 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; if not einheit_existiert ('m') then insert into einheit (einheit_kurz, bezeichnung) values (m', 'Meter'); end if;
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 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
24
Thom Evans: My new hat
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.