Oracle PL / SQL gyűjtemények: Varrays, Beágyazott & Táblázatok szerinti index

Tartalomjegyzék:

Anonim

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 " (). ". Ezekről a fent említett gyűjtemény-kategóriákról további információkat az alábbi szakaszban talál.

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:

TYPE  IS 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:

TYPE  IS 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

TYPE  IS 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 .EXISTS (elem_pozíció)
SZÁMOL Megadja a gyűjteményben található elemek teljes számát .COUNT
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 .LIMIT
ELSŐ Visszaadja a gyűjtemények első indexváltozójának (indexének) értékét . ELSŐ
UTOLSÓ Visszaadja a gyűjtemények utolsó indexváltozójának (indexének) értékét . UTOLSÓ
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 . ELŐZŐ (n)
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 . KÖVETKEZŐ (n)
KITERJESZT Kiterjeszti a gyűjtemény egyik elemét a végén .EXTEND
EXTEND (n) N elemet bővít a gyűjtemény végén .EXTEND (n)
EXTEND (n, i) Kiterjeszti az i . Elem n példányát a gyűjtemény végén .EXTEND (n, i)
TRIM Eltávolít egy elemet a gyűjtemény végéből . TRIM
TRIM (n) Eltávolít n elemet a gyűjtemény végéről . TRIM (n)
TÖRÖL Törli az összes elemet a gyűjteményből. Üresvé teszi a gyűjteményt .TÖRLÉS
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 (n)
TÖRLÉS (m, n) Törli az elemet a tartományban m edik és n edik a gyűjtemény . TÖRLÉS (m, n)

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----------------------------------------------