Mi a csomag az Oracle-ben?
A PL / SQL csomag egy kapcsolódó alprogram (eljárás / függvény) logikai csoportosítása egyetlen elemre. A Csomagot adatbázis-objektummá fordítják és tárolják, amely később felhasználható.
Ebben az oktatóanyagban megtanulja-
- A csomagok alkotóelemei
- Csomag specifikáció
- Csomagolás teste
- Csomagelemek hivatkozása
- Csomag létrehozása PL / SQL-ben
- Továbbító nyilatkozatok
- Kurzorok használata a csomagban
- Túlterhelés
- Függőség a csomagokban
- Csomag információk
- UTL FÁJL - Áttekintés
A csomagok alkotóelemei
A PL / SQL csomagnak két összetevője van.
- Csomag specifikáció
- Csomagolás teste
Csomag specifikáció
A csomag specifikáció az összes nyilvános változó, kurzor, objektum, eljárás, függvény és kivétel deklarációjából áll.
Az alábbiakban bemutatjuk a Package specifikáció néhány jellemzőjét.
- A specifikációban deklarált elemek a csomag kívülről érhetők el. Az ilyen elemeket nyilvános elemként ismerjük.
- A csomag specifikáció önálló elem, ami azt jelenti, hogy egyedül létezhet a csomag törzse nélkül.
- Amikor egy csomag hivatkozott, a csomag egy példánya létrejön az adott munkamenethez.
- Miután létrehozta a példányt egy munkamenethez, az adott példányban elindított összes csomagelem a munkamenet végéig érvényes.
Szintaxis
CREATE [OR REPLACE] PACKAGEIS … END
A fenti szintaxis a csomagspecifikáció létrehozását mutatja.
Csomagolás teste
A csomagspecifikációban található összes elem meghatározásából áll. Meghatározhatja azokat az elemeket is, amelyek nincsenek deklarálva a specifikációban, ezeket az elemeket privát elemeknek nevezzük, és csak a csomag belsejéből hívhatók meg.
Az alábbiakban bemutatjuk a csomagolás jellemzőit.
- Tartalmaznia kell a specifikációban deklarált összes alprogram / kurzor definícióját.
- Több alprogramja vagy más eleme is lehet, amelyek nincsenek deklarálva a specifikációban. Ezeket privát elemeknek nevezzük.
- Megbízható objektum, és a csomag specifikációjától függ.
- A csomag törzsének állapota „érvénytelen” lesz, amikor a specifikációt összeállítják. Ezért a specifikáció összeállítása után minden alkalommal újra össze kell állítani.
- A privát elemeket először meg kell határozni, mielőtt felhasználnák őket a csomag törzsében.
- A csomag első része a globális deklarációs rész. Ide tartoznak a teljes csomag számára látható változók, kurzorok és privát elemek (forward deklaráció).
- A csomag utolsó része a Csomag inicializálása rész, amely egyszer hajt végre, amikor egy csomagot először hivatkoznak a munkamenetre.
Szintaxis:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- A fenti szintaxis a csomag törzsének létrehozását mutatja.
Most megnézzük, hogyan lehet hivatkozni a csomagelemekre a programban.
Csomagelemek hivatkozása
Miután az elemeket deklaráltuk és definiáltuk a csomagban, hivatkoznunk kell az elemekre azok használatához.
A csomag minden nyilvános elemére hivatkozhatunk a csomag nevének hívásával, amelyet az elem neve periódusokkal elválasztva, azaz „
A csomag nyilvános változója ugyanúgy felhasználható értékek hozzárendelésére és lekérésére belőlük, azaz '
Csomag létrehozása PL / SQL-ben
PL / SQL-ben, amikor egy csomagot hivatkoznak / hívnak meg egy munkamenetben, új példány jön létre az adott csomaghoz.
Az Oracle lehetőséget nyújt a csomagelemek inicializálására, vagy bármely tevékenység végrehajtására a példány létrehozása idején a „Csomagindítással”.
Ez nem más, mint egy végrehajtási blokk, amelyet a csomag törzsébe írnak, miután meghatározták az összes csomag elemet. Ez a blokk akkor kerül végrehajtásra, ha egy csomagot először hivatkoznak a munkamenetre.
Szintaxis
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- A fenti szintaxis bemutatja a csomag inicializálásának meghatározását a csomag törzsében.
Továbbító nyilatkozatok
A csomagban található továbbítási nyilatkozat / hivatkozás nem más, mint a privát elemek külön-külön történő deklarálása és meghatározása a csomag törzsének későbbi részében.
A privát elemekre csak akkor lehet hivatkozni, ha azt már a csomag törzse deklarálta. Emiatt határidős nyilatkozatot használnak. De meglehetősen szokatlan a használata, mert a privát elemeket legtöbbször a csomag törzsének első részében deklarálják és definiálják.
A továbbítási nyilatkozat az Oracle által biztosított lehetőség, nem kötelező, és a használata és nem használata a programozó követelményeinek felel meg.
Szintaxis:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
A fenti szintaxis előrejelzést mutat. A privát elemeket a csomag elülső részében külön deklaráljuk, és a későbbi részben definiáljuk.
Kurzorok használata a csomagban
Más elemekkel ellentétben óvatosan kell eljárni a kurzorok használatakor a csomagban.
Ha a kurzort meghatározták a csomag specifikációjában vagy a csomag törzsének globális részében, akkor a megnyitott kurzor a munkamenet végéig megmarad.
Tehát mindig a kurzor „% ISOPEN” attribútumát kell használni a kurzor állapotának ellenőrzéséhez, mielőtt hivatkoznánk rá.
Túlterhelés
A túlterhelés az a fogalom, hogy sok alprogramnak ugyanaz a neve. Ezek az alprogramok számos paraméterrel vagy paramétertípussal vagy visszatérési típussal különböznek egymástól, vagyis az azonos nevű, de eltérő számú paraméterrel, különböző típusú paraméterekkel vagy eltérő típusú új alprogramokat túlterhelésnek tekintik.
Ez akkor hasznos, ha sok alprogramnak ugyanazt a feladatot kell elvégeznie, de mindegyikük hívásának módjának különböznie kell. Ebben az esetben az alprogram neve ugyanaz marad mindenki számára, és a paraméterek megváltoznak a hívó utasítás szerint.
1. példa : Ebben a példában egy csomagot fogunk létrehozni, hogy megszerezzük és beállítsuk a munkavállalói információk értékeit az 'emp' táblázatba. A get_record függvény visszaadja az adott alkalmazott szám rekordtípusú kimenetét, a set_record eljárás pedig beilleszti a rekord típusú rekordot az emp táblába.
1. lépés) Csomag specifikáció létrehozása
CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/
Kimenet:
Package created
Kód Magyarázat
- 1-5 . Kódsor: A guru99_get_set csomag specifikációjának létrehozása egy eljárással és egy függvénnyel. Ez a kettő már nyilvános eleme ennek a csomagnak.
2. lépés) A csomag tartalmazza a Package body elemet, ahol meghatározzák az összes eljárást és funkciót. Ebben a lépésben létrejön a Package Body.
CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/
Kimenet:
Package body created
Kód Magyarázat
- 7. kódsor: A csomag törzsének létrehozása.
- 9-16 kódsor: A specifikációban deklarált 'set_record' elem meghatározása. Ez megegyezik az önálló eljárás definiálásával a PL / SQL-ben.
- Kódsor 17-24: A 'get_record' elem meghatározása. Ez megegyezik az önálló funkció definiálásával.
- 25-26 kódsor: A csomag inicializálási részének meghatározása.
3. lépés: Névtelen blokk létrehozása a rekordok beillesztésére és megjelenítésére a fent létrehozott csomagra hivatkozva.
DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/
Kimenet:
Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB
Kód Magyarázat:
- Kódsor 34-37: A rekordtípus változó adatainak feltöltése egy névtelen blokkban a csomag 'set_record' elemének meghívására.
- 38. kódsor : Hívás történt a guru99_get_set csomag 'set_record'-jára. Most a csomag példányos lesz, és a munkamenet végéig megmarad.
- A csomag inicializálási része végrehajtásra kerül, mivel ez az első hívás a csomagra.
- A „set_record” elem által a táblázatba beillesztett rekord.
- 41. kódsor : A 'get_record' elem hívása a beillesztett alkalmazott részleteinek megjelenítéséhez.
- A csomagra másodszor hivatkozunk a csomag „get_record” hívása során. De az inicializáló rész ezúttal nem kerül végrehajtásra, mivel a csomag már inicializálva van ebben a munkamenetben.
- Kódsor 42-45: Az alkalmazottak adatainak nyomtatása.
Függőség a csomagokban
Mivel a csomag a kapcsolódó dolgok logikai csoportosítása, van néhány függősége. A következőkben a függőségről kell gondoskodni.
- A Specifikáció önálló objektum.
- A csomag törzse a specifikációtól függ.
- A csomag törzse külön összeállítható. A specifikáció összeállításakor a törzset újra össze kell állítani, mivel érvénytelen lesz.
- A csomagtörzs privát elemtől függő alprogramját csak a privát elem deklarációja után szabad meghatározni.
- A specifikációban és a törzsben hivatkozott adatbázis-objektumoknak a csomag összeállításakor érvényes állapotban kell lenniük.
Csomag információk
A csomaginformációk létrehozása után a csomaginformációk, például a csomagforrás, az alprogram részletei és a túlterhelés részletei elérhetők az Oracle adatdefiníciós tábláiban.
Az alábbi táblázat az adatdefiníciós táblázatot és a táblázatban elérhető csomaginformációkat tartalmazza.
Tábla neve | Leírás | Lekérdezés |
ALL_OBJECT | Megadja a csomag részleteit, például: object_id, creation_date, last_ddl_time stb. Ez tartalmazza az összes felhasználó által létrehozott objektumokat. | SELECT * FROM all_objects, ahol object_name = ' |
USER_OBJECT | Megadja a csomag részleteit, például: object_id, creation_date, last_ddl_time stb. Ez tartalmazza az aktuális felhasználó által létrehozott objektumokat. | SELECT * FROM user_objects, ahol object_name = ' |
ALL_SOURCE | Megadja az összes felhasználó által létrehozott objektumok forrását. | SELECT * FROM all_source ahol name = ' |
USER_SOURCE | Megadja az aktuális felhasználó által létrehozott objektumok forrását. | SELECT * FROM user_source ahol name = ' |
ALL_PROCEDURES | Megadja az összes felhasználó által létrehozott alprogram részleteit, például az objektumazonosítót, a túlterhelés részleteit stb. | SELECT * FROM all_procedures Where object_name = ' |
USER_PROCEDURES | Megadja az alprogram részleteit, például az objektumazonosítót, a túlterhelés részleteit stb., Amelyeket az aktuális felhasználó készített. | SELECT * FROM user_procedures ahol object_name = ' |
UTL FÁJL - Áttekintés
Az UTL File az Oracle által biztosított külön segédprogram-csomag speciális feladatok elvégzéséhez. Ez elsősorban az operációs rendszer fájljainak olvasására és írására szolgál PL / SQL csomagokból vagy alprogramokból. Külön funkciókat kapott az információk elhelyezéséhez és az információk fájlokból való megszerzéséhez. Lehetővé teszi a natív karakterkészletben való olvasást / írást is.
A programozó ezt felhasználhatja bármilyen típusú operációs rendszer fájlok írására, és a fájl közvetlenül az adatbázis-kiszolgálóra lesz írva. A név és a könyvtár elérési útja megemlítésre kerül az írás során.
Összegzés
Most megtanultuk a csomagokat PL / SQL-ben, és most már képesnek kell lennie a következőkre.
- PL / SQL csomagok és alkotóelemei
- A csomagok jellemzői
- Csomagelemek hivatkozása és túlterhelése
- A függőségek kezelése csomagokban
- Csomaginformációk megtekintése
- Mi az UTL fájl