Mi az a gyűjtemény?
A gyűjtemény egy meghatározott adattípusok elemeinek rendezett csoportja. Ez lehet egyszerű adattípus vagy összetett adattípus (például a felhasználó által definiált vagy rekordtípusok) gyűjteménye.
A gyűjteményben minden elemet egy "subcript" nevű kifejezéssel azonosítanak . A gyűjtemény minden eleméhez egyedi alindex tartozik. A gyűjtemény adatai manipulálhatók vagy lekérhetők az adott egyedi indexre hivatkozva.
A gyűjtemények akkor a leghasznosabbak, ha nagy, azonos típusú adatokat kell feldolgozni vagy manipulálni. A gyűjtemények egészben betölthetők és manipulálhatók az Oracle 'BULK' opciójával.
Ebben az oktatóanyagban megtanulja-
- Mi az a gyűjtemény?
- Varrays
- Beágyazott táblázatok
- Indexenként
- Konstruktor és inicializálási koncepció a gyűjteményekben
- Gyűjtési módszerek
A gyűjteményeket a felépítés, az index és a tárhely alapján osztályozzák az alábbiak szerint.
- Index-táblázatok (más néven asszociatív tömb)
- Beágyazott táblák
- Varrays
A gyűjtemény adatait bármikor három kifejezéssel megnevezhetjük. A Gyűjtemény neve, az Al index, a Mező / Oszlop neve "
Varrays
A Varray olyan gyűjtési módszer, amelyben a tömb mérete rögzített. A tömb mérete nem léphető túl a rögzített értékénél. A Varray indexe numerikus értékű. A következők a Varrays attribútumai.
- A felső határ mérete rögzített
- Az „1” alindexszel kezdve sorban feltöltött
- Ez a gyűjteménytípus mindig sűrű, vagyis nem törölhetünk tömb elemeket. A Varray egészében törölhető, vagy a végétől vágható.
- Mivel mindig sűrű természetű, nagyon kevés a rugalmassága.
- Helyesebb használni, ha a tömb mérete ismert, és hasonló tevékenységeket kell végrehajtani az összes tömbelemen.
- Az index és a szekvencia mindig stabil marad, vagyis a gyűjtemény indexe és száma mindig ugyanaz.
- Inicializálni kell őket, mielőtt programokban használnák őket. Bármely művelet (az EXISTS művelet kivételével) egy inicializálatlan gyűjteményen hibát okoz.
- Létrehozható adatbázis-objektumként, amely az egész adatbázisban vagy az alprogramon belül látható, és csak abban az alprogramban használható.
Az alábbi ábra vázlatosan elmagyarázza a Varray (sűrű) memóriaelosztását.
Előirat | 1 | 2 | 3 | 4 | 5. | 6. | 7 |
Érték | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Szintaxis a VARRAY számára:
TYPEIS VARRAY ( ) OF ;
- A fenti szintaxisban a type_name-t a DATA_TYPE típusú VARRAY-ként deklaráljuk az adott méretkorlátozáshoz. Az adattípus lehet egyszerű vagy összetett.
Beágyazott táblázatok
A Beágyazott tábla olyan gyűjtemény, amelyben a tömb mérete nincs rögzítve. Numerikus al index típusa van. Az alábbiakban további leírások találhatók a beágyazott táblázat típusáról.
- A Beágyazott táblázat felső korlátja nincs.
- Mivel a felső mérethatár nincs rögzítve, a gyűjteményt, a memóriát minden egyes alkalommal meg kell bővíteni, mielőtt felhasználnánk. Bővíthetjük a gyűjteményt az 'EXTEND' kulcsszóval.
- Az „1” al indexgel kezdve egymás után töltve.
- Ez a gyűjteménytípus lehet sűrű és ritka is , azaz létrehozhatjuk a gyűjteményt sűrűként, és véletlenszerűen is törölhetjük az egyes tömb elemeket, amelyek ritkává teszik.
- Nagyobb rugalmasságot biztosít a tömb elem törlésével kapcsolatban.
- A rendszer által létrehozott adatbázis-táblában tárolja, és a kiválasztási lekérdezésben használható az értékek lekérésére.
- Az index és a szekvencia nem stabil, azaz az index és a tömb elem száma változhat.
- Inicializálni kell őket, mielőtt programokban használnák őket. Az inicializálatlan gyűjtemény bármely művelete (kivéve az EXISTS műveletet) hibát okoz.
- Létrehozható adatbázis-objektumként, amely az egész adatbázisban vagy az alprogramon belül látható, és csak abban az alprogramban használható.
Az alábbi ábra vázlatosan elmagyarázza a beágyazott tábla (sűrű és ritka) memóriaelosztását. A fekete színű elemtér a gyűjtemény üres elemét, azaz ritkát jelöli.
Előirat | 1 | 2 | 3 | 4 | 5. | 6. | 7 |
Érték (sűrű) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Érték (ritka) | Qwe | ASD | Afg | ASD | Mi vagyunk |
Szintaxis a beágyazott táblához:
TYPEIS TABLE OF ;
- A fenti szintaxisban a type_name név a DATA_TYPE típusú beágyazott tábla gyűjtemény. Az adattípus lehet egyszerű vagy összetett.
Indexenként
Az Index-táblánként olyan gyűjtemény, amelyben a tömb mérete nincs rögzítve. A többi gyűjteménytípustól eltérően az indexenként táblázatos gyűjteményben az indexet a felhasználó határozhatja meg. Az alábbiakban bemutatjuk az indexenkénti attribútumokat.
- Az index indexe egész vagy karakterlánc. A gyűjtemény készítésekor meg kell említeni az index típusát.
- Ezeket a gyűjteményeket nem tároljuk egymás után.
- Mindig ritka természetűek.
- A tömb mérete nincs rögzítve.
- Nem tárolhatók az adatbázis oszlopban. Ezeket az adott munkamenet bármely programjában létre kell hozni és használni kell.
- Nagyobb rugalmasságot biztosítanak az indexek fenntartása szempontjából.
- Az előfizetők negatív indexszekvenciájúak is lehetnek.
- Megfelelőbbek azokhoz a viszonylag kisebb kollektív értékekhez, amelyekben a gyűjtemény inicializálható és felhasználható ugyanazon alprogramokon belül.
- Használatuk megkezdése előtt nem szükséges inicializálni őket.
- Nem hozható létre adatbázis objektumként. Csak az alprogramon belül hozható létre, amely csak abban az alprogramban használható.
- A BULK COLLECT nem használható ebben a gyűjteménytípusban, mivel az indexet kifejezetten meg kell adni a gyűjtemény minden rekordjára.
Az alábbi ábra vázlatosan elmagyarázza a beágyazott tábla (ritka) memóriaelosztását. A fekete színű elemtér a gyűjtemény üres elemét, azaz ritkát jelöli.
Előirat (varchar) | ELSŐ | MÁSODIK | HARMADIK | NEGYEDIK | ÖTÖDIK | HATODIK | HETEDIK |
Érték (ritka) | Qwe | ASD | Afg | ASD | Mi vagyunk |
Szintaxis az indexenként
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- A fenti szintaxisban a type_name -t a „DATA_TYPE” típusú index-tábla gyűjteményként deklarálják. Az adattípus lehet egyszerű vagy összetett. Az subsciprt / index változó VARCHAR2 típusként van megadva, maximális mérete 10.
Konstruktor és inicializálási koncepció a gyűjteményekben
A konstruktorok az oracle által biztosított beépített funkciók, amelyeknek ugyanaz a neve, mint az objektumnak vagy a gyűjteményeknek. Először akkor hajtják végre őket, amikor egy objektumra vagy gyűjteményre először hivatkoznak egy munkamenet során. Az alábbiakban bemutatjuk a kivitelező fontos részleteit a gyűjtemény összefüggésében:
- Gyűjtemények esetében ezeket a konstruktorokat kifejezetten fel kell hívni az inicializáláshoz.
- A Varray és a Nested táblákat ezen konstruktorokon keresztül kell inicializálni, mielőtt bekerülnénk a programba.
- A konstruktor implicit módon kiterjeszti a gyűjtemény memória-allokációját (a Varray kivételével), ennélfogva a konstruktor a változókat is hozzárendelheti a gyűjteményekhez.
- Az értékek konstruktorok általi hozzárendelése soha nem teszi ritkává a gyűjteményt.
Gyűjtési módszerek
Az Oracle számos funkcióval rendelkezik a gyűjtemények kezelésére és kezelésére. Ezek a függvények nagyon hasznosak a programban a gyűjtemények különböző tulajdonságainak meghatározásához és módosításához. Az alábbi táblázat a különböző funkciókat és azok leírását tartalmazza.
Módszer | Leírás | SZINTAXIS |
LÉTEZIK (n) | Ez a módszer logikai eredményeket ad vissza. Visszaadja az IGAZ értéket, ha az n- edik elem létezik abban a gyűjteményben, ellenkező esetben HAMIS. Inicializálatlan gyűjteményben csak az EXISTS függvények használhatók | |
SZÁMOL | Megadja a gyűjteményben található elemek teljes számát | |
HATÁR | Visszaadja a gyűjtemény maximális méretét. Varray esetében a rögzített méretet adja vissza, amelyet definiáltak. A beágyazott tábla és az indexenkénti táblázat esetében a NULL értéket adja meg | |
ELSŐ | Visszaadja a gyűjtemények első indexváltozójának (indexének) értékét | |
UTOLSÓ | Visszaadja a gyűjtemények utolsó indexváltozójának (indexének) értékét | |
ELŐZŐ (n) | Visszaadja az indexváltozót az n- edik elem gyűjteményében . Ha nincs megelőző indexérték, akkor a NULL értéket adja vissza | |
KÖVETKEZŐ (n) | Visszaadja az indexváltozót az n- edik elem gyűjteményében . Ha nincs sikeres index érték, akkor a NULL értéket adja vissza | |
KITERJESZT | Kiterjeszti a gyűjtemény egyik elemét a végén | |
EXTEND (n) | N elemet bővít a gyűjtemény végén | |
EXTEND (n, i) | Kiterjeszti az i . Elem n példányát a gyűjtemény végén | |
TRIM | Eltávolít egy elemet a gyűjtemény végéből | |
TRIM (n) | Eltávolít n elemet a gyűjtemény végéről | |
TÖRÖL | Törli az összes elemet a gyűjteményből. Üresvé teszi a gyűjteményt | |
TÖRLÉS (n) | Törli az n-edik elemet a gyűjteményből. Ha az n . Elem NULL, akkor ez semmit sem fog tenni | |
TÖRLÉS (m, n) | Törli az elemet a tartományban m edik és n edik a gyűjtemény |
1. példa: Rekordtípus alprogram szinten
Ebben a példában azt fogjuk megtudni, hogyan lehet a „BULK COLLECT” használatával feltölteni a gyűjteményt, és hogyan lehet a gyűjtemény adatait hivatkozni.
DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);TYPE emp_det_tbl IS TABLE OF emp_det; guru99_emp_rec emp_det_tbl:= emp_det_tbl();BEGININSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1000,’AAA’,25000,1000);INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1001,'XXX’,10000,1000);INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);INSERT INTO emp (emp_no,emp_name,salary, manager) VALUES (1003,’ZZZ’,'7500,1000);COMMIT:SELECT emp no,emp_name,manager,salary BULK COLLECT INTO guru99_emp_recFROM emp;dbms_output.put_line (‘Employee Detail');FOR i IN guru99_emp_rec.FIRST… guru99_emp_rec.LASTLOOPdbms_output.put_line (‘Employee Number: '||guru99_emp_rec(i).emp_no);dbms_output.put_line (‘Employee Name: '||guru99_emp_rec(i).emp_name);dbms_output.put_line (‘Employee Salary:'|| guru99_emp_rec(i).salary);dbms_output.put_line(‘Employee Manager Number:'||guru99_emp_rec(i).manager);dbms_output.put_line('--------------------------------');END LOOP;END;/
Kód Magyarázat:
- 2-8 . Kódsor: Az „emp_det” rekordtípus deklarálva van az emp_no, emp_name, fizetés és a NUMBER, VARCHAR2, NUMBER, NUMBER adattípus kezelőivel.
- 9. kódsor : Az „emp_det” rekord típusú elem „emp_det_tbl” gyűjteményének létrehozása
- 10. kódsor : A „guru99_emp_rec” változó deklarálása „emp_det_tbl” típusra és null konstruktorral inicializálása.
- Kódsor 12-15: Helyezze be a mintaadatokat az 'emp' táblába.
- 16. kódsor : A beszúrási tranzakció végrehajtása.
- 17. kódsor : A rekordok lekérése az 'emp' táblából és a gyűjtemény változójának tömeges feltöltése a "BULK COLLECT" paranccsal. Most a 'guru99_emp_rec' változó tartalmazza az 'emp' táblázatban található összes rekordot.
- 19-26 kódsor: A 'FOR' hurok beállítása a gyűjtemény összes rekordjának egyesével történő kinyomtatásával. A FIRST és LAST gyűjtési módszert használják a hurok alsó és felső határaként.
Kimenet : Amint a fenti képernyőképen láthatja, amikor a fenti kód végrehajtásra kerül, a következő kimenetet kapja
Employee DetailEmployee Number: 1000Employee Name: AAAEmployee Salary: 25000Employee Manager Number: 1000----------------------------------------------Employee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000----------------------------------------------Employee Number: 1002Employee Name: YYYEmployee Salary: 15000Employee Manager Number: 1000----------------------------------------------Employee Number: 1003Employee Name: ZZZEmployee Salary: 7500Employee Manager Number: 1000----------------------------------------------