Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaMarcell Kocsis Megváltozta több, mint 10 éve
1
2012. tavaszi félév Vitéz Gergely
2
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
3
Azonosítóval ellátott esemény Ha bekövetkezik, a PL/SQL blokk futása megszakad A vezérlés a kivételkezelő blokkra adódik Hibák esetén fordul elő, vagy ha előidézzük a RAISE kulcsszóval
4
PL/SQL kulcsszavak: DECLARE --változók deklarálása BEGIN --programkód EXCEPTION WHEN kivétel THEN WHEN OTHERS THEN --minden egyéb kivétel --kivételkezelő blokk END; / Próbáljuk meg előidézni a következő dián kezelt kivételeket!
5
SET serveroutput ON DECLARE v_szam NUMBER(5); BEGIN SELECT sal INTO v_szam FROM emp WHERE ename = 'KING'; dbms_output.put_line('Az eredmény: ' || v_szam); EXCEPTION WHEN ZERO_DIVIDE THEN dbms_output.put_line('Nullával nem oszthatsz!'); WHEN NO_DATA_FOUND THEN dbms_output.put_line('Nincs eredmény!'); WHEN TOO_MANY_ROWS THEN dbms_output.put_line('Túl sok eredmény!'); WHEN OTHERS THEN dbms_output.put_line(SQLCODE); dbms_output.put_line(SQLERRM); END; /
6
DECLARE részben deklarálni kell A RAISE kulcsszóval lehet kiváltani DECLARE kivetel EXCEPTION; BEGIN IF feltétel THEN RAISE kivetel; … Próbáljunk egy saját kivételkezelést megvalósítani
7
SET serveroutput ON DECLARE v_szam NUMBER; gazdag EXCEPTION; BEGIN SELECT sal INTO v_szam FROM emp WHERE ename = 'KING'; IF v_szam > 4000 THEN RAISE gazdag; ELSE dbms_output.put_line(v_szam); END IF; EXCEPTION WHEN gazdag THEN dbms_output.put_line('Gazdag'); WHEN OTHERS THEN dbms_output.put_line(SQLCODE); dbms_output.put_line(SQLERRM); END; /
8
Névvel ellátott blokkok Fogadhatnak paramétereket Lehet visszatérési értékük Tárolt Eljárások: PROCEDURE Nincs visszatérési értéke Függvények: FUNCTION Van visszatérési értéke
9
CREATE OR REPLACE PROCEDURE {eljárásnév} [ ({paraméterlista}) ] IS [{lokális változók}] BEGIN {utasítások} [EXCEPTION …] END; /
10
Futtatása PL/SQL blokkon belül: eljárás(paraméterek); Futtatása PL/SQL blokkon kívülről: EXECUTE {eljárásnév(paraméterek)}; Törlés: DROP PROCEDURE {eljárásnév};
11
CREATE OR REPLACE PROCEDURE kiir( szoveg VARCHAR2 DEFAULT 'semmi') IS v_atad VARCHAR2(200); BEGIN v_atad := szoveg; dbms_output.put_line(v_atad); END; / set serveroutput on exec kiir; exec kiir(‘proba');
12
CREATE OR REPLACE FUNCTION {eljárásnév} [ ({paraméterlista}) ] RETURN {típus} IS [{lokális változók}] BEGIN {utasítások} [EXCEPTION …] END; /
13
CREATE OR REPLACE FUNCTION osszead( elso NUMBER, masodik NUMBER) RETURN NUMBER IS v_eredmeny NUMBER; BEGIN v_eredmeny:= elso + masodik; RETURN v_eredmeny; END; / SET serveroutput ON EXEC dbms_output.put_line(osszead(2,3));
14
2011. 04. 20.14 Adott esemény bekövetkezésére reagálunk (tárolt eljárást futtat) INSERT, UPDATE, DELETE, CREATE, ALTER, DROP Mikor: BEFORE, AFTER, INSTEAD OF Bekövetkezhet műveletenként, soronként: FOR EACH ROW Soronként az egyes sorok régi és új adatai is elérhetőek :NEW, :OLD
15
CREATE OR REPLACE TRIGGER {név} [BEFORE | AFTER | INSTEAD OF] {esemény} [OR {esemény} …] ON {tábla} [FOR EACH ROW [WHEN {feltétel}]] [DECLARE {változók}] BEGIN {utasítások} [EXCEPTION …] END;
16
DROP TABLE dolgozo; CREATE TABLE dolgozo AS SELECT * FROM emp; CREATE OR REPLACE TRIGGER SomeTrigger BEFORE DELETE OR INSERT OR UPDATE ON dolgozo FOR EACH ROW BEGIN IF INSERTING THEN IF :NEW.sal < 1000 THEN raise_application_error(-20000, 'Hiba: túl kicsi a fizetés!'); END IF; dbms_output.put_line('Uj: ' || :NEW.ename); ELSIF DELETING THEN dbms_output.put_line('Töröl: ' || :OLD.ename); ELSIF UPDATING THEN dbms_output.put_line('Módosít: ' || :OLD.ename || ' ==>' || :NEW.ename); END IF; END; /
17
Triggerek letiltása: ALTER TRIGGER SomeTrigger disable; Engdélyezés: ALTER TRIGGER SomeTrigger disable; Saját alkalmazáshiba dobása: raise_application_error(-20000, 'Hiba'); A szám tetszőleges -20000 és -20999 között
18
Köszönöm a figyelmet! Anyag: Példatár 10. fejezet NagyZH pótlás Pénteken 16:00-tól, 18:00-tól, 20:00-tól az 1.13, 1.14, 2.10, 2.20 laborokban! http://www.orakulum.com http://jerry.gorextar.hu/ab1 vitez.gergely@spectronet.hu
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.