Čo je to zbierka?
Zbierka je usporiadaná skupina prvkov konkrétnych dátových typov. Môže to byť kolekcia jednoduchých dátových typov alebo zložitých dátových typov (napríklad používateľom definované alebo typy záznamov).
V zbierke je každý prvok identifikovaný výrazom nazývaným „dolný index“. Každá položka v zbierke má priradený jedinečný dolný index. S údajmi v tejto kolekcii je možné manipulovať alebo načítať odkaz na tento jedinečný dolný index.
Zbierky sú najužitočnejšie veci, keď je potrebné spracovať alebo manipulovať s veľkými údajmi rovnakého typu. Zbierky je možné naplniť a manipulovať s nimi ako celok pomocou voľby „HROMADNE“ v systéme Oracle.
V tomto návode sa naučíte
- Čo je to zbierka?
- Varrays
- Vnorené tabuľky
- Index-by-table
- Konštruktér a koncepcia inicializácie v zbierkach
- Metódy zberu
Zbierky sú klasifikované na základe štruktúry, dolného indexu a ukladacieho priestoru, ako je uvedené nižšie.
- Index-by-tables (tiež známy ako Associative Array)
- Vnorené tabuľky
- Varrays
Údaje v zbierke možno kedykoľvek označiť tromi výrazmi Názov zbierky, Dolný index, Názov poľa / stĺpca ako „
Varrays
Varray je metóda zhromažďovania, pri ktorej je pevná veľkosť poľa. Veľkosť poľa nemôže byť prekročená, ako je jeho pevná hodnota. Dolný index Varray má číselnú hodnotu. Nasledujú atribúty Varrays.
- Veľkosť horného limitu je pevná
- Zaľudnené postupne počnúc dolným indexom „1“
- Tento typ kolekcie je vždy hustý, tj nemôžeme vymazať žiadne prvky poľa. Varray je možné vymazať ako celok, alebo ho možno od konca orezávať.
- Pretože má vždy hustú povahu, má veľmi menšiu pružnosť.
- Je vhodnejšie použiť, keď je známa veľkosť poľa, a vykonávať podobné činnosti na všetkých prvkoch poľa.
- Dolný index a sekvencia zostávajú vždy stabilné, tj. Dolný index a počet zbierok je vždy rovnaký.
- Pred použitím v programoch je potrebné ich inicializovať. Akákoľvek operácia (okrem operácie EXISTUJE) na neinicializovanej kolekcii spôsobí chybu.
- Môže byť vytvorený ako databázový objekt, ktorý je viditeľný v celej databáze alebo vo vnútri podprogramu, ktorý je možné použiť iba v tomto podprograme.
Na nasledujúcom obrázku je schematicky vysvetlené rozdelenie pamäte Varray (husté).
Dolný index | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Hodnota | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Syntax pre VARRAY:
TYPEIS VARRAY ( ) OF ;
- Vo vyššie uvedenej syntaxi je typ_name deklarovaný ako VARRAY typu „DATA_TYPE“ pre daný limit veľkosti. Dátový typ môže byť buď jednoduchého, alebo zložitého typu.
Vnorené tabuľky
Vnorená tabuľka je kolekcia, v ktorej nie je pevná veľkosť poľa. Má číselný typ dolného indexu. Ďalej uvádzame ďalšie popisy typu vnorenej tabuľky.
- Vnorená tabuľka nemá žiadny horný limit veľkosti.
- Pretože horný limit veľkosti nie je stanovený, kolekcia musí byť pamäť rozšírená zakaždým, ako ju použijeme. Zbierku môžeme rozšíriť pomocou kľúčového slova „EXTEND“.
- Založené postupne od dolného indexu „1“.
- Tento typ kolekcie môže byť hustý aj riedky , tj. Kolekciu môžeme vytvoriť ako hustú a môžeme tiež náhodne vymazať jednotlivé prvky poľa, čím sa stane riedkym.
- Poskytuje väčšiu flexibilitu, pokiaľ ide o odstránenie prvku poľa.
- Je uložený v systémovo vygenerovanej databázovej tabuľke a je možné ho použiť vo výberovom dotaze na načítanie hodnôt.
- Dolný index a postupnosť nie sú stabilné, tj. Dolný index a počet prvkov poľa sa môžu líšiť.
- Pred použitím v programoch je potrebné ich inicializovať. Akákoľvek operácia (okrem operácie EXISTUJE) na neinicializovanej kolekcii spôsobí chybu.
- Môže byť vytvorený ako databázový objekt, ktorý je viditeľný v celej databáze alebo vo vnútri podprogramu, ktorý je možné použiť iba v tomto podprograme.
Na nasledujúcom obrázku je schematicky vysvetlené alokovanie pamäte vnorenej tabuľky (hustá a riedka). Čierne zafarbený priestor prvkov označuje prázdny prvok v zbierke, tj riedky.
Dolný index | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Hodnota (hustá) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Hodnota (riedka) | Qwe | Asd | Afg | Asd | Wer |
Syntax pre vnorenú tabuľku:
TYPEIS TABLE OF ;
- Vo vyššie uvedenej syntaxi je type_name deklarovaný ako kolekcia vnorenej tabuľky typu „DATA_TYPE“. Dátový typ môže byť buď jednoduchého, alebo zložitého typu.
Index-by-table
Index-by-table je kolekcia, v ktorej nie je pevná veľkosť poľa. Na rozdiel od iných typov kolekcií môže v kolekcii index-by-table index tvoriť používateľ, ktorý môže byť definovaný sám. Nasledujú atribúty indexu podľa tabuľky.
- Dolný index môže byť celé číslo alebo reťazec. V čase vytvárania zbierky by sa mal uviesť typ dolného indexu.
- Tieto zbierky sa neukladajú postupne.
- V prírode sú vždy riedke.
- Veľkosť poľa nie je pevná.
- Nemôžu byť uložené v stĺpci databázy. Budú vytvorené a použité v akomkoľvek programe v príslušnej relácii.
- Poskytujú väčšiu flexibilitu, pokiaľ ide o zachovanie dolného indexu.
- Dolné indexy môžu byť tiež negatívnej dolnej sekvencie.
- Je vhodnejšie ich použiť pre relatívne menšie kolektívne hodnoty, v ktorých je možné zbierku inicializovať a použiť v rámci rovnakých podprogramov.
- Pred použitím ich nie je potrebné inicializovať.
- Nemožno ho vytvoriť ako databázový objekt. Môže byť vytvorený iba vo vnútri podprogramu, ktorý je možné použiť iba v tomto podprograme.
- V tomto type kolekcie nemožno použiť BULK COLLECT, pretože dolný index by mal byť uvedený výslovne pre každý záznam v kolekcii.
Na nasledujúcom obrázku je schematicky vysvetlené alokovanie pamäte vnorenej tabuľky (riedke). Čierne zafarbený priestor prvkov označuje prázdny prvok v zbierke, tj riedky.
Dolný index (varchar) | NAJPRV | DRUHÉ | TRETÍ | ŠTVRTÝ | PIATY | ŠIESTY | SEDEM |
Hodnota (riedka) | Qwe | Asd | Afg | Asd | Wer |
Syntax pre index podľa tabuľky
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Vo vyššie uvedenej syntaxi je type_name deklarovaný ako kolekcia index-by-table typu 'DATA_TYPE'. Dátový typ môže byť buď jednoduchého, alebo zložitého typu. Premenná subsciprt / index je uvedená ako typ VARCHAR2 s maximálnou veľkosťou 10.
Konštruktér a koncepcia inicializácie v zbierkach
Konštruktory sú zabudovanou funkciou poskytovanou Oracle, ktorá má rovnaký názov ako objekt alebo kolekcie. Vykonajú sa najskôr, kedykoľvek sa na objekt alebo kolekcie odkazuje v relácii prvýkrát. Nižšie sú uvedené dôležité podrobnosti konštruktora v kontexte kolekcie:
- Pre kolekcie by sa tieto konštruktory mali explicitne volať, aby sa inicializovali.
- Tabuľky Varray aj Nested je potrebné pred uvedením do programu inicializovať prostredníctvom týchto konštruktorov.
- Konštruktor implicitne rozširuje alokáciu pamäte pre kolekciu (okrem Varray), preto môže konštruktor tiež priradiť premenné do kolekcií.
- Priradením hodnôt do kolekcie prostredníctvom konštruktorov sa kolekcia nikdy nestane riedkou.
Metódy zberu
Oracle poskytuje mnoho funkcií na manipuláciu a prácu so zbierkami. Tieto funkcie sú v programe veľmi užitočné na určenie a úpravu rôznych atribútov zbierok. Nasledujúca tabuľka poskytuje rôzne funkcie a ich popis.
Metóda | Popis | SYNTAX |
EXISTUJE (n) | Táto metóda vráti booleovské výsledky. Ak v tejto kolekcii existuje n- tý prvok, vráti hodnotu „TRUE“ , inak vráti hodnotu FALSE. V neinicializovanej zbierke je možné použiť iba funkcie EXISTUJÚCE | |
COUNT | Poskytuje celkový počet prvkov prítomných v kolekcii | |
LIMIT | Vráti maximálnu veľkosť zbierky. Pre Varray vráti pevnú veľkosť, ktorá bola definovaná. Pre vnorenú tabuľku a index podľa tabuľky dáva NULL | |
NAJPRV | Vráti hodnotu prvej premennej indexu (dolného indexu) kolekcií | |
POSLEDNÉ | Vráti hodnotu poslednej premennej indexu (dolného indexu) kolekcií | |
PRIOR (n) | Vráti predchodnú premennú indexu v kolekcii n- tého prvku. Ak hodnota indexu predchádza, vráti sa NULL | |
ĎALŠIE (n) | Vráti úspešnú indexovú premennú v kolekcii n- tého prvku. Ak nie je žiadny úspešný, vráti sa hodnota indexu NULL | |
ROZŠÍRTE | Na konci rozšíri jeden prvok v kolekcii | |
ROZŠÍR (n) | Rozširuje n prvkov na konci kolekcie | |
EXTEND (n, i) | Rozširuje n kópií i- teho prvku na konci zbierky | |
TRIM | Odstráni jeden prvok z konca kolekcie | |
TRIM (n) | Odstráni n prvkov z konca zbierky | |
ODSTRÁNIŤ | Vymaže všetky prvky zo zbierky. Robí zbierku prázdnou | |
ODSTRÁNIŤ (n) | Vymaže n-tý prvok zo zbierky. Ak je n- tý prvok NULL, potom to neurobí nič | |
DELETE (m, n) | Odstráni prvok v rozmedzí m th až n th v zbierke |
Príklad 1: Typ záznamu na úrovni podprogramu
V tomto príklade sa pozrieme na to, ako naplniť kolekciu pomocou programu „BULK COLLECT“ a ako odkázať na dáta kolekcie.
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;/
Vysvetlenie kódu:
- Riadok kódu 2-8 : Typ záznamu „emp_det“ je deklarovaný so stĺpcami emp_no, emp_name, plat a správca údajového typu NUMBER, VARCHAR2, NUMBER, NUMBER.
- Riadok kódu 9: Vytvorenie kolekcie „emp_det_tbl“ prvku typu záznamu „emp_det“
- Riadok kódu 10: Deklarácia premennej „guru99_emp_rec“ ako typu „emp_det_tbl“ a inicializovaná nulovým konštruktorom.
- Riadok kódu 12-15: Vloženie vzorových údajov do tabuľky „emp“.
- Riadok kódu 16: Potvrdenie transakcie vloženia.
- Riadok kódu 17: Načítanie záznamov z tabuľky „emp“ a vyplnenie premennej kolekcie hromadne pomocou príkazu „BULK COLLECT“. Teraz premenná 'guru99_emp_rec' obsahuje všetky záznamy, ktoré sa nachádzajú v tabuľke 'emp'.
- Riadok kódu 19-26: Nastavenie slučky „FOR“ na tlač jednotlivých záznamov v zbierke po jednom. Ako dolná a horná hranica slučky sa používa metóda FIRST and LAST.
Výstup : Ako vidíte na snímke vyššie, po vykonaní vyššie uvedeného kódu získate nasledujúci výstup
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----------------------------------------------