Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN
Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs részük egy interfészt biztosít, amelyen keresztül hozzáférhetünk a csomag eszközeihez. Törzsrészük tartalmazza a futtatható kódot. Csomag specifikációk Csomag törzs Package Package Body Nincs futtatható kód Az alprogramok nevei túlterhelhetők Összefügg a specifikációval A törzsben lehetnek privát változók 16/2 B IT MAN
Csomagok felépítése 1 1 Publikus változók Procedure A deklaráció 2 2 Publikus alprogramok deklarációi 3 3 Globális privát változók Procedure B definíció 5 4 4 Privát alprogramok Procedure A definíció 2 2 Publikus alprogramok implementációi 5 Privát alprogramok implementációi 16/3 B IT MAN
Csomagok létrehozása Létrehozásuk két külön paranccsal történik! Specifikációs rész: CREATE PACKAGE csomag_név IS -- Publikus terület -- publikus változók, típusok, kurzorok deklarációja -- alprogram specifikációk END [csomag_név]; Törzs rész: CREATE PACKAGE BODY csomag_név IS -- Privát terület -- privát változók, típusok, kurzorok deklarációja -- alprogram törzsek -- [inicializációs kifejezések] END [csomag_név]; 16/4 B IT MAN
Csomagok létrehozása Szövegszerkesztő Figyelmeztetés: A csomag létrehozása fordítási hibákkal fejeződött be. Show errors Szerkesztés 1 2 Text fájl Tárolás az adatbázisban Forráskód Fordítás P-kód A csomag létrejött. Futtatás 16/5 B IT MAN
Csomag példa 1. create or replace package csomag1 as x int:=5; procedure kiir; 1 2 create or replace package body csomag1 as procedure kiir as dbms_output.put_line('x= ' x); csomag1.x:=10; csomag1.kiir; csomag1.x:=10; csomag1.kiir; x= 10 16/6 x= 5 B IT MAN
Csomag példa 2. T3 kod adat create or replace package csomag2 as procedure t3beszur (a int); procedure t3beszur (a char); procedure t3beszur (a int, b char); create or replace package body csomag2 as procedure t3beszur (a int) as insert into t3 (kod) values(a); procedure t3beszur (a char) as insert into t3 (adat) values(a); procedure t3beszur (a int, b char) as insert into t3 values(a, b); 16/7 B IT MAN
Csomag példa 3. create or replace package csomag3 is cursor cur is select adat from t3; procedure kiir; T3 kod adat 1 Kiss Béla 2 Nagy Ödön 3 Fekete Joe 4 Fehér Jenő create or replace package body csomag3 is procedure kiir as nev varchar2(20); if cur%isopen then dbms_output.put_line('kurzor nyitva.'); else dbms_output.put_line('kurzor zárva. Megnyitás.'); open cur; end if; fetch cur into nev; dbms_output.put_line('név: ' nev); fetch cur into nev; dbms_output.put_line('név: ' nev); 16/8 B IT MAN
Csomag példa 3. T3 kod adat 1 Kiss Béla 2 Nagy Ödön 3 Fekete Joe 4 Fehér Jenő csomag3.kiir; csomag3.kiir; Kurzor zárva. Megnyitás. Név: Kiss Béla Név: Nagy Ödön Kurzor nyitva. Név: Fekete Joe Név: Fehér Jenő 16/9 B IT MAN
Autós példa 26. Az alábbi két alprogramot helyezzük el egy csomagban, és onnan hívjuk meg őket! create or replace procedure torol (x in number) as delete from auto where kor>x; create or replace function maxar return number as x number(8); select max(ar) into x from auto; return x; 16/10 B IT MAN
Autós példa 26. (folytatás) create or replace package aut_cs1 as procedure torol (x in number); function maxar return number; end aut_cs1; 16/11 B IT MAN
Autós példa 26. (folytatás) create or replace package body aut_cs1 as procedure torol (x in number) as delete from auto where kor>x; function maxar return number as x number(8); select max(ar) into x from auto; return x; end aut_cs1; 16/12 B IT MAN
Autós példa 26. (folytatás) Az eljárás és a függvény hívása a csomagból 16/13 B IT MAN
Órai feladatok 1. Készítsen egy UjTermek nevű tárolt eljárást, mely: - az egyes mezők értékét paraméterként kapja meg, - saját hibát dobva figyelmeztet (képernyőüzenettel), ha nem létező kategóriájú terméket akarnánk felvinni, - saját hibát dobva figyelmeztet (képernyőüzenettel), ha már létező azonosítójú terméket akarnánk felvinni. Készítsen egy TermekSzam nevű tárolt függvényt, mely a paraméterként névvel megadott kategóriájú termékek darabszámát adja vissza a Termék táblából. Pl. TermekSzam('Pia'); Készítsen egy KategoriLista nevű tárolt eljárást, mely kilistázza a képernyőre, hogy az egyes kategóriákban hány darab termék van. (Kurzorkezelés!) Helyezze el az elkészített alprogramokat egy TermekCsomag nevű csomagban, és sorra hívja meg a csomag egyes alprogramjait. 16/14 B IT MAN
Órai feladatok 2. Hozza létre az alábbi táblát: Szemely [ID int pk, Nev varchar(25), Fizetes int] Szúrjon be 4-5 rekordot a Szemely táblába. Készítsen egy tárolt eljárást (ModF), mely módosítja egy paraméterként megadott ID-jű személy fizetését egy paraméterként megadott értékre. Készítsen egy tárolt függvényt (KerN), mely visszaadja egy paraméterként megadott ID-jű személy nevét. A két alprogramot helyezze el egy csomagban (Sz_cs). Futtassa a csomagban lévő alprogramokat. 16/15 B IT MAN
VÉGE VÉGE 16/16 B IT MAN