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

2012. tavaszi félév Vitéz Gergely. 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.

Hasonló előadás


Az előadások a következő témára: "2012. tavaszi félév Vitéz Gergely. 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."— Előadás másolata:

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


Letölteni ppt "2012. tavaszi félév Vitéz Gergely. 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."

Hasonló előadás


Google Hirdetések