pl sql collections nested table
Naučte sa základy kolekcií PL SQL, metód zhromažďovania, Varray, vnorenej tabuľky a asociatívneho poľa pomocou príkladov kódu:
V Podprogramy PL / SQL návod na Séria PL / SQL , dozvedeli sme sa o procedúrach a funkciách, rôznych metódach odovzdávania parametrov a o tom, ako vytvárať / mazať procedúry a funkcie v PL / SQL.
V tomto článku sa budeme zaoberať zbierkami PL SQL a súvisiacimi konceptmi. Vysvetlíme tiež koncept Varrays, vnorených tabuliek a indexovaných tabuliek, ktoré sú k dispozícii v PL / SQL.
Okrem toho preskúmame niektoré zabudované výnimky a metódy zhromažďovania.
Čo sa dozviete:
- PL SQL zbierky
- Vnorené tabuľky v PL / SQL
- Tabuľky asociatívneho poľa alebo indexu
- Varrays v PL / SQL
- Záver
PL SQL zbierky
Zbierka je skupina prvkov homogénnych dátových typov. Spravidla obsahuje polia, zoznamy, množiny atď. Každý z prvkov má konkrétny dolný index, ktorý odráža jeho polohu.
Zbierky PL SQL sú nasledujúcich typov:
- Asociatívne tabuľky typu Array / Index-by
- Vnorené tabuľky.
- Varrays.
Zbierky PL SQL sa všeobecne používajú na ukladanie a manipuláciu s veľkými kusmi údajov pomocou kľúčového slova BULK COLLECT v systéme Oracle.
Metódy zberu
Pl / SQL má v rámci kolekcie zabudované niektoré metódy, ktoré sú uvedené nižšie.
Sl. Č. | názov | Popisy |
---|---|---|
7 | nasledujúci (m) | Poskytuje index, ktorý je úspešný po m. Indexe. |
jeden | počítať | Uvádza počet prvkov prítomných v kolekcii. |
dva | limit | Overuje veľkosť zbierky. |
3 | existuje (m) | Vráti hodnotu true, ak m-tý prvok prítomný v kolekcii else vráti hodnotu false. |
4 | najprv | Poskytuje počiatočné číslo indexu v zbierke s celočíselným dolným indexom. |
5 | posledný | Uvádza číslo koncového indexu v kolekcii s celočíselným dolným indexom. |
6 | predĺžiť | Pridá prvok NULL na koniec zbierky. |
8 | pred (m) | Poskytuje index, ktorý predchádza m indexu. |
9 | obrezať | Vymaže prvok z konca zbierky. |
10 | obruba (m) | Vymaže m prvkov z konca zbierky. |
jedenásť | vymazať | Vymaže všetky prvky zo zbierky a nastaví počet na 0. |
12 | vymazať (m) | Vymaže m-tý prvok z kolekcie. Ak má m-tý prvok hodnotu NULL, potom sa nevykoná žiadna akcia. |
13 | vymazať (m, k) | Vymaže prvok z m-tej do k-tej polohy. |
14 | predĺženie (m) | Pridá prvok m na koniec zbierky. |
pätnásť | predĺžiť (m, k) | Na konci zbierky pridá m kópií k-tého prvku. |
Výnimky pri zbere
Niektoré z bežných výnimiek pri zhromažďovaní sú:
- VALUE_ERROR: Táto výnimka sa vyvolá, ak nemožno dolný index previesť na typ kľúča alebo má hodnotu NULL. Táto výnimka sa zvyčajne vyvolá, ak je kľúč typu rozsahu PLS_INTEGER a dolný index sa nachádza za týmto rozsahom.
- NEBOLI NÁJDENÉ ŽIADNE DÁTA: Túto výnimku vyvolá PL / SQL, ak buď príkaz SELECT nezíska žiadne riadky, alebo program ukazuje na prvok, ktorý je odstránený vo vnorenej tabuľke. Túto výnimku môže vyvolať aj prvok, ktorý je neinicializovaný v indexovanej tabuľke.
- COLLECTION_IS_NULL: Túto výnimku vyvolá PL / SQL, ak je predvolene kolekcia NULL.
- SUBSCRIPT_BEYOND_COUNT: Táto výnimka sa vyvolá, keď je dolný index vyšší ako celkový počet prvkov v kolekcii.
- SUBSCRIPT_OUTSIDE_LIMIT: Táto výnimka sa vyvolá, keď je dolný index nad rozsahom prahových hodnôt.
Vnorené tabuľky v PL / SQL
Vnorené tabuľky sú ako databázová tabuľka s jedným stĺpcom alebo 1-rozmerné pole, kde je veľkosť poľa dynamická. Jeho dolný index je číselného typu. Vnorenú tabuľku môžeme dostať do premennej tak, že dáme riadkom dolný index, ktorý začína 1. Táto vlastnosť ju robí svojou povahou podobnou ako pole.
Vnorenú tabuľku je možné uchovať v stĺpci databázy. Môže sa tiež použiť na manipuláciu s operáciami SQL spojením tabuliek. Pretože je to ako dynamické pole, horná hranica môže mať ľubovoľnú veľkosť.
Vnorená tabuľka môže mať hustú aj riedku charakteristiku zhromažďovania, čo znamená, že ľubovoľný prvok je možné náhodne vymazať (urobiť ho riedkym) pomocou procedúry DELETE. Vymazanie údajov spôsobí diskontinuitu v indexe, ale funkcia NEXT pomáha pri iterácii na ďalšie dolné indexy. Pretože sú údaje uložené vo forme tabuľky, je možné ich získať pomocou príkazov SELECT.
Vnorenú tabuľku je možné vytvoriť na úrovni schémy alebo v bloku PL / SQL. Je to ako databázový objekt, ktorý je prístupný v rámci databázy alebo podprogramu.
Rozdiely medzi tabuľkou Array a Nested sú uvedené nižšie:
- Veľkosť vnorených tabuliek sa dá dynamicky zväčšiť. Horná hranica poľa je pevná, ale nie je pevná pre vnorené tabuľky.
- Pole má po sebe nasledujúce spodné indexy, vďaka čomu je hustý. Vnorená tabuľka je však v čase vytvorenia hustá, ale po odstránení prvkov medzi nimi bude redšia.
Syntax vnorenej tabuľky:
TYPE <> IS TABLE OF <> (NOT NULL);
Tu, ‘Typ’ je typový špecifikátor. 'prvok' je dátový typ.
Implementácia kódu pomocou vnorenej tabuľky:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
Výstup z vyššie uvedeného kódu by mal byť:
Tabuľky asociatívneho poľa alebo indexu
Tabuľka indexu sa bežne nazýva asociatívne pole. Pokiaľ ide o štruktúru, indexovaná tabuľka aj vnorené tabuľky sú podobné a na prístup k prvkom majú dolný index.
Asociatívne pole je reprezentované párom kľúč - hodnota. Každý z jedinečných kľúčov sa používa na identifikáciu hodnoty v poli. Dátovým typom kľúča môže byť reťazec alebo celé číslo definované pri jeho vytváraní. Kľúč sa pridá do tabuľky indexu jednoduchým priradením hodnoty po prvýkrát. Na úpravu toho istého záznamu musíme použiť ten istý kľúč.
Kľúč by mal byť jedinečný buď ako primárny kľúč v tabuľke, alebo kombináciou reťazcov, aby sa získala jedinečná hodnota. Tento typ kolekcie má veľkosť poľa, ktorá je dynamická a má buď riedke alebo husté vlastnosti. Jedným z rozdielov medzi indexovanou tabuľkou a vnorenou tabuľkou je, že predchádzajúcu tabuľku nemožno uložiť do stĺpca databázy, ale vnorenú tabuľku je možné uložiť.
Asociatívne polia poskytujú ľahkú údržbu dolného indexu a sú vytvárané v rámci bloku PL / SQL. Je to ako tabuľka SQL, kde sa hodnoty získavajú pomocou primárneho kľúča. Spravidla sa používa na dočasné ukladanie údajov a je možné ho použiť namiesto tabuliek SQL, aby sa zabránilo sieťovému prenosu a diskovému ukladaniu vyžadovanému tabuľkami SQL.
Pretože asociatívne polia neukladajú trvalé údaje, nemožno ich použiť s príkazmi SQL ako SELECT a INSERT. Môžu sa však stať nekonečnými pre reláciu databázy vyhlásením ich údajového typu za balík a ich definovaním v tele balíka.
Syntax indexovanej tabuľky:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Tu je „Kľúč“ je číselná. Môže to byť buď BINARY_INTEGER alebo PLS_INTEGER. Jeho dátový typ môže byť varchar, varchar2, long alebo string. Pri dĺžke je potrebné spomenúť kľúč založený na varchar.
'prvok' je dátový typ.
‘Veľkosť’ je maximálny počet prvkov. Je to kladné celé číslo.
‘Typ’ je typový špecifikátor.
Implementácia kódu s tabuľkou indexu:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
Výstup z vyššie uvedeného kódu by mal byť:
Varrays v PL / SQL
Varraysové ukladajú pevný počet prvkov a sú ako jednorozmerné pole. Počet prvkov je však možné za behu upraviť. Je to postupná množina prvkov podobných dátových typov. Môže byť uložený v databázovej tabuľke, s ktorou je možné manipulovať pomocou príkazov SQL. Ale proces nie je taký ľahký a flexibilný ako vo vnorenej tabuľke.
Maximálna veľkosť Varray je definovaná v jeho definícii typu. Má jedno za druhým usporiadanie pamäte začínajúce 1 dolným indexom a adresa s najnižšou polohou smeruje k počiatočnému prvku a adresa s najvyššou polohou smeruje k koncovému prvku. Všetky prvky Varray sú identifikované indexom.
Tento typ zbierky má číselný dolný index a má husté charakteristiky. Prvky poľa teda nemôžu byť medzi nimi vymazané. Celý Varray by mal byť vymazaný alebo jeho koniec môže byť orezaný. Vďaka svojim hustým vlastnostiam má menšiu flexibilitu použitia.
Varray je možné vytvoriť buď v rámci bloku PL / SQL, alebo na úrovni schémy. Považuje sa to za databázový objekt, ku ktorému je možné pristupovať v databáze alebo v rámci podprogramu. Varray sa používa častejšie, keď je nám známa veľkosť poľa. Mal by sa inicializovať pred ich použitím a dá sa inicializovať pomocou konštruktora. Jeho hodnota má pri deklarácii hodnotu NULL a mala by sa inicializovať pred odkazom na jeho prvky.
Syntax Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Tu,
‘Typ’ je typový špecifikátor.
'prvok' je dátový typ.
‘Veľkosť’ je maximálny počet prvkov v poli. Je to kladné celé číslo.
Deklarácia a inicializácia premenných Varray
Po vytvorení Varray ho môžeme deklarovať spôsobom popísaným nižšie:
Syntax:
name type_n (:= type_n(...));
Tu,
'názov' je meno Varray.
‘Type_n’ je typ Varray.
„Type_n (…)“ je konštruktor typu Varray. Zoznamy argumentov sú spomenuté oddeľovačom čiarky a typu Varray.
Pred použitím premennej Varray musíme inicializovať, inak spôsobí chybu neinicializovaného zhromažďovania. Inicializácia sa vykonáva spôsobom popísaným nižšie.
Syntax:
name type_n := type_n();
Týmto sa inicializuje premenná s nulovými prvkami. Ak chcete vyplniť prvky v premenných premennej, syntax je:
name type_n := type_n(e1, e2, ...);
Prístup k prvkom Varray
K prvkom je možné získať prístup podľa postupu popísaného nižšie:
meno (m); kde m je index prvkov, ktorý začína 1 a končí maximálnym počtom prvkov typu Varray. V prípade, že m je nad rozsahom 1 a maximálny počet prvkov, SUBSCRIPT_BEYOND_COUNT výnimku vyvolá PL / SQL.
Veľkosť Varray sa dá upraviť pomocou príkazu ALTER.
Implementácia kódu pomocou ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Výstup z vyššie uvedeného kódu by mal byť.
otázky a odpovede na otázky týkajúce sa automatizácie testovania java
Implementácia kódu pomocou Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
Výstup z vyššie uvedeného kódu by mal byť:
Rozdiely medzi varray a vnorenými tabuľkami
Rozdiely sú nasledujúce:
- Zatiaľ čo pracujeme na scenári, kde je známy počet prvkov a sú zoradené postupne, zvyčajne sa používajú Varrays. Varray, ktorý je uložený v databáze, si zachováva svoje spodné indexy a postupnosť. Vždy sa udržiava ako jeden objekt. Zatiaľ čo vnorené tabuľky sa používajú, keď počet obmedzení nie je obmedzený.
- Vnorená tabuľka má riedke vlastnosti, ktoré jej umožňujú odstrániť akýkoľvek prvok z ľubovoľnej polohy a nie vždy od konca. Poradie a dolný index vnorenej tabuľky sa neuchovávajú, keď je uložená v databáze. Prvky Varray sú vždy udržiavané v postupnosti.
Rozdiely medzi asociatívnymi poľami a vnorenými tabuľkami
Rozdiely sú nasledujúce:
- Vnorené tabuľky môžu byť uložené v stĺpci databázy, ale asociatívne polia nie. Vnorené tabuľky udržiavajú správne dátové vzťahy, ktoré sú trvalo uložené.
- Asociatívne polia sú vhodné pre malé vyhľadávacie tabuľky, kde je možné kolekciu vytvoriť v pamäti pri každej inicializácii balíka alebo volaní procedúry. Sú dobrou voľbou, keď veľkosť nie je známa vopred. Hodnoty indexu asociatívneho poľa sú flexibilné, pretože dolné indexy tohto poľa nie sú v poradí alebo môžu byť záporné alebo reťazcové namiesto čísla.
Často kladené otázky a odpovede
Otázka č. 1) Prečo používame kolekcie v PL / SQL?
Odpoveď: Existujú tri typy kolekcií - Vnorené tabuľky, Asociatívne polia a Varrays. Vnorené tabuľky môžu ukladať náhodný počet prvkov. Varrays dokáže uložiť pevný počet prvkov a asociatívne polia nám umožňujú vyhľadávať prvky s náhodnými číslami a reťazcami.
Otázka 2) Čo je vnorená tabuľka v PL / SQL?
Odpoveď: Vnorená tabuľka má 1 rozmerný charakter a jej veľkosť nezostáva pevná. Je k nim prístup v blokoch SQL a PL / SQL. Môže byť použitý v záznamoch, definíciách objektov a tabuľkách.
Otázka č. 3) Čo je hromadný zber v Oracle PL / SQL?
Odpoveď: Hromadný zber je metóda získavania údajov, keď stroj PL / SQL informuje stroj SQL, aby zhromaždil viac riadkov naraz a uložil ich do zbierky.
Otázka č. 4) Prečo je hromadný zber v Oracle rýchlejší?
Odpoveď: Hromadné zhromažďovanie zvyšuje výkon tým, že obmedzuje interakciu medzi mechanizmom PL / SQL a databázou.
Otázka č. 5) Čo je Varray v PL / SQL?
Odpoveď: Jedná sa o dátovú štruktúru PL / SQL, ktorá sa používa na ukladanie homogénnej zbierky prvkov rovnakého dátového typu do postupnosti. Väčšinou sa používa na uchovávanie usporiadanej množiny údajov.
Otázka č. 6) Môžeme vymazať prvok z Varray v Oracle?
Odpoveď: Nemôžeme priamo upravovať ani mazať prvky vo Varray pomocou príkazov SQL. Musíme vybrať Varray z tabuľky, upraviť ju v PL / SQL a potom upraviť tabuľku a uložiť ju do nového Varray.
Otázka č. 7) Aký je rozdiel medzi vnorenou tabuľkou a Varray?
Odpoveď: Rozdiely sú uvedené nižšie:
- Varray berieme, keď je počet prvkov známy už skôr. Toto obmedzenie nie je možné vo vnorených tabuľkách.
- Vo Varray sa prvky používajú postupne. Vnorený stôl má husté aj riedke vlastnosti.
- Prvky sú vždy usporiadané vo Varray. Prvky môžu, ale nemusia byť v poriadku vo vnorenej tabuľke.
Záver
V tomto tutoriáli sme podrobne rozobrali niektoré základné pojmy PL / SQL, ktoré sú nevyhnutné pri rozvíjaní vedomostí o nich.
Prebrali sme nasledujúce témy uvedené nižšie:
- Základné znalosti o zbierkach PL SQL (metódy a výnimky).
- Varrays.
- Vnorené tabuľky
- Indexované tabuľky
<< PREV Tutorial | ĎALŠÍ výukový program >>
Odporúčané čítanie
- Typy údajov poľa - int pole, dvojité pole, pole reťazcov atď.
- Java Array - Ako tlačiť prvky poľa v Jave?
- Výukový program PL SQL pre začiatočníkov s príkladmi Čo je to PL / SQL
- Java Array - Deklarovať, vytvoriť a inicializovať pole v Jave
- Výukový program Java Array Length s príkladmi kódu
- Presné rozdiely medzi programom SQL a NoSQL a informácia o tom, kedy používať NoSQL a SQL
- Rozdiel medzi serverom SQL Vs MySQL Vs SQL Server (s príkladmi)
- Vnorená trieda JUnit 5: @Nested Tutorial s príkladmi