pl sql collections nested table
Naučte se základy PL SQL sbírek, metody sběru, Varray, vnořená tabulka a asociativní pole pomocí příkladů kódu:
V Podprogramy PL / SQL návod na Série PL / SQL , jsme se dozvěděli o procedurách a funkcích, různých metodách předávání parametrů a jak vytvářet / mazat procedury a funkce v PL / SQL.
V tomto článku probereme PL SQL kolekce a související koncepty. Vysvětlíme také koncept Varrays, vnořených tabulek a indexovaných tabulek, které jsou k dispozici v PL / SQL.
Kromě toho prozkoumáme některé integrované výjimky kolekce a metody kolekce.
Co se naučíte:
- PL SQL sbírky
- Vnořené tabulky v PL / SQL
- Asociativní tabulky nebo tabulky indexů
- Varrays v PL / SQL
- Závěr
PL SQL sbírky
Kolekce je skupina prvků homogenních datových typů. Obecně obsahuje pole, seznamy, sady atd. Každý z prvků má určitý dolní index, který odráží jeho polohu.
Kolekce PL SQL jsou následujících typů:
- Asociativní tabulky Array / Index-by
- Vnořené tabulky.
- Varrays.
Kolekce PL SQL se obecně používají pro ukládání a manipulaci s velkými bloky dat pomocí klíčového slova BULK COLLECT v Oracle.
Metody sběru
Pl / SQL má v rámci kolekce některé předdefinované metody, které jsou uvedeny níže.
Sl. Ne. | název | Popisy |
---|---|---|
7 | další (m) | Poskytuje index, který uspěje po m. Indexu. |
1 | počet | Uvádí počet prvků přítomných v kolekci. |
dva | omezit | Ověří velikost kolekce. |
3 | existuje (m) | Vrátí true, pokud mth prvek přítomný v kolekci else vrátí false. |
4 | První | Dává počáteční číslo indexu ve sbírce s celočíselným dolním indexem. |
5 | poslední | Poskytuje číslo koncového indexu v kolekci s celočíselným dolním indexem. |
6 | rozšířit | Přidá prvek NULL na konec kolekce. |
8 | předchozí (m) | Poskytuje index, který předchází m indexu. |
9 | čalounění | Odstraní prvek z konce kolekce. |
10 | obložení (m) | Odstraní m prvků z konce kolekce. |
jedenáct | vymazat | Odstraní všechny prvky z kolekce a nastaví počet na 0. |
12 | vymazat (m) | Odstraní mth element z kolekce, pokud mth element má NULL, pak se neprovede žádná akce. |
13 | vymazat (m, k) | Odstraní prvek z polohy mth do kth. |
14 | prodloužení (m) | Přidá prvek m na konec kolekce. |
patnáct | prodloužení (m, k) | Přidá m kopií kth prvku na konec kolekce. |
Výjimky z kolekce
Některé běžné výjimky kolekce jsou následující:
- VALUE_ERROR: Tato výjimka je vyvolána, pokud dolní index nelze převést na typ klíče nebo má hodnotu NULL. Tato výjimka se obvykle vyvolá, pokud je klíč typu PLS_INTEGER a dolní index se nachází mimo tento rozsah.
- NENALEZENA ŽÁDNÁ DATA: Tuto výjimku vyvolá PL / SQL, pokud buď příkaz SELECT nenačte žádné řádky, nebo program odkazuje na prvek, který je odstraněn ve vnořené tabulce. Tuto výjimku lze také vyvolat prvkem, který je neinicializován v indexové tabulce.
- COLLECTION_IS_NULL: Tuto výjimku vyvolá PL / SQL, pokud je ve výchozím nastavení kolekce NULL.
- SUBSCRIPT_BEYOND_COUNT: Tato výjimka je vyvolána, když je dolní index větší než celkový počet počtu prvků v kolekci.
- SUBSCRIPT_OUTSIDE_LIMIT: Tato výjimka je vyvolána, když je dolní index nad prahovou hodnotou.
Vnořené tabulky v PL / SQL
Vnořené tabulky jsou jako databázová tabulka s jedním sloupcem nebo jednorozměrné pole, kde je velikost pole dynamická. Jeho dolní index je číselného typu. Vnořenou tabulku můžeme dostat do proměnné tak, že dáme řádkům dolní index, který začíná 1. Díky této vlastnosti je podobná jako pole.
Vnořená tabulka může být uložena ve sloupci databáze. Lze jej také použít k manipulaci s operacemi SQL spojením tabulek. Jelikož je to jako dynamické pole, může mít horní limit libovolnou velikost.
Vnořená tabulka může mít jak hustou, tak řídkou charakteristiku kolekce, což znamená, že libovolný prvek může být náhodně odstraněn (což je řídké) pomocí procedury DELETE. Odstranění dat způsobí diskontinuitu v indexu, ale funkce NEXT pomáhá iterovat k dalším indexům. Protože jsou data uložena ve formě tabulky, lze je načíst pomocí příkazů SELECT.
Vnořenou tabulku lze vytvořit na úrovni schématu nebo v bloku PL / SQL. Je to jako databázový objekt, který je přístupný v rámci databáze nebo podprogramu.
Rozdíly mezi poli a vnořenou tabulkou jsou uvedeny níže:
- Velikost vnořených tabulek lze dynamicky zvětšovat. Horní limit pole je pevný, ale u vnořených tabulek není pevný.
- Pole má po sobě následující indexy, díky nimž je hustý. Vnořená tabulka je však v době vytvoření hustá, ale po odstranění prvků mezi nimi bude řídká.
Syntaxe vnořené tabulky:
TYPE <> IS TABLE OF <> (NOT NULL);
Tady, 'typ' je specifikátor typu. 'živel' je datový typ.
Implementace kódu pomocí vnořené tabulky:
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 výše uvedeného kódu by měl být:
Asociativní tabulky nebo tabulky indexů
Tabulka indexu se běžně nazývá asociativní pole. Pokud jde o strukturu, indexovaná tabulka i vnořené tabulky jsou podobné a pro přístup k prvkům mají index.
Asociativní pole je reprezentováno párem klíč – hodnota. Každý z jedinečných klíčů se používá k identifikaci hodnoty v poli. Datový typ klíče může být řetězec nebo celé číslo definované při jeho vytváření. Klíč je přidán do tabulky indexu jednoduchým přiřazením hodnoty poprvé. Chcete-li upravit stejnou položku, musíme použít stejný klíč.
Klíč by měl být jedinečný buď jako primární klíč v tabulce, nebo kombinací řetězců, aby se vyvinula jedinečná hodnota. Tento typ kolekce má velikost pole, které je dynamické a má řídké nebo husté vlastnosti. Jeden rozdíl mezi indexovanou tabulkou a vnořenou tabulkou spočívá v tom, že první nelze uložit do sloupce databáze, ale vnořenou tabulku lze uložit.
Asociativní pole poskytují snadnou údržbu dolního indexu a jsou vytvářena v rámci bloku PL / SQL. Je to jako tabulka SQL, kde se hodnoty získávají pomocí primárního klíče. To se obecně používá pro dočasné ukládání dat a lze jej použít místo tabulek SQL, aby se zabránilo síťovému provozu a diskovému úložišti požadovanému tabulkami SQL.
Protože asociativní pole neukládají trvalá data, nelze je použít s příkazy SQL, jako jsou SELECT a INSERT. Lze je však učinit nekonečným pro relaci databáze deklarováním jejich datového typu jako balíčku a jejich definováním uvnitř těla balíčku.
Syntaxe indexované tabulky:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Tady je 'klíč' je číselné. Může to být buď BINARY_INTEGER nebo PLS_INTEGER. Jeho datový typ může být varchar, varchar2, long nebo string. Klíč založený na varchar by měl být uveden s délkou.
'živel' je datový typ.
'velikost' je maximální počet prvků. Je to kladné celé číslo.
'typ' je specifikátor typu.
Implementace kódu s tabulkou 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 výše uvedeného kódu by měl být:
Varrays v PL / SQL
Varraysové ukládají pevný počet prvků a jsou jako jednorozměrné pole. Počet prvků však lze upravit za běhu. Jedná se o po sobě jdoucí sadu prvků podobných datových typů. Může být uložen v databázové tabulce, kterou lze zpracovat pomocí příkazů SQL. Proces však není tak snadný a flexibilní jako ve vnořené tabulce.
Maximální velikost Varray je definována v definici jeho typu. Má jedno po druhém uspořádání paměti počínaje 1 dolním indexem a adresa nejnižšího umístění ukazuje na počáteční prvek a adresa nejvyššího umístění ukazuje na koncový prvek. Všechny prvky Varray jsou označeny indexem.
Tento typ sbírky má číselný dolní index a má husté charakteristiky. Prvky pole tedy nelze mezi nimi odstranit. Buď by měl být odstraněn celý Varray, nebo může být oříznut jeho konec. Díky svým hustým vlastnostem má menší flexibilitu použití.
Varray lze vytvořit buď v rámci bloku PL / SQL, nebo na úrovni schématu. Považuje se za databázový objekt, ke kterému lze přistupovat v databázi nebo v podprogramu. Varray se používá častěji, když je nám známa velikost pole. Mělo by být inicializováno před jejich použitím a může být inicializováno pomocí konstruktoru. Jeho hodnota je NULL, když je deklarována, a měla by být inicializována před odkazem na jeho prvky.
Syntaxe Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Tady,
'typ' je specifikátor typu.
'živel' je datový typ.
'velikost' je maximální počet prvků v poli. Je to kladné celé číslo.
Deklarace a inicializace proměnných Varray
Po vytvoření Varray jej můžeme deklarovat způsobem popsaným níže:
Syntax:
name type_n (:= type_n(...));
Tady,
'název' je název Varray.
‘Type_n’ je typ Varray.
„Type_n (…)“ je konstruktor typu Varray. Seznamy argumentů jsou zmíněny oddělovačem čárky a typu Varray.
Před použitím proměnné Varray musíme inicializovat, jinak dává neinicializovanou chybu kolekce. Inicializace se provádí způsobem popsaným níže.
Syntax:
name type_n := type_n();
Tím se inicializuje proměnná s nulovými prvky. Aby bylo možné naplnit prvky v proměnných Varray, syntaxe je:
name type_n := type_n(e1, e2, ...);
Přístup k prvkům Varray
K prvkům lze přistupovat pomocí níže popsaného procesu:
jméno (m); kde m je index elementů, který začíná 1 a končí maximálním počtem prvků typu Varray. V případě, že m je za rozsahem 1 a maximálním počtem prvků, SUBSCRIPT_BEYOND_COUNT výjimka je vyvolána PL / SQL.
Velikost Varray lze upravit pomocí příkazu ALTER.
Implementace kódu pomocí ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Výstup z výše uvedeného kódu by měl být.
nejlepší bezplatný firewall pro Windows XP
Implementace kódu pomocí 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 výše uvedeného kódu by měl být:
Rozdíly mezi varrays a vnořenými tabulkami
Rozdíly jsou následující:
- Zatímco pracujeme na scénáři, kde je znám počet prvků a jsou uspořádány postupně, obvykle se používají Varrays. Varray, který je uložen v databázi, udržuje své dolní indexy a sekvenci. Vždy se udržuje jako jeden objekt. Zatímco vnořené tabulky se používají, když není omezen počet počtu prvků.
- Vnořená tabulka má řídké charakteristiky, které jí umožňují odebrat libovolný prvek z libovolné pozice a ne vždy od konce. Pořadí a dolní index vnořené tabulky se neuchovávají, když je uložena v databázi. Prvky Varray jsou vždy udržovány v pořadí.
Rozdíly mezi asociativními poli a vnořenými tabulkami
Rozdíly jsou následující:
- Vnořené tabulky lze uložit do sloupce databáze, ale asociativní pole nejsou. Vnořené tabulky udržují správné datové vztahy, které jsou trvale uloženy.
- Asociativní pole jsou vhodná pro malé vyhledávací tabulky, kde lze kolekci vytvořit v paměti pokaždé, když je inicializován balíček nebo je volána procedura. Jsou dobrou volbou, pokud velikost není předem známa. Hodnoty indexu asociativního pole jsou flexibilní, protože dolní indexy tohoto pole nejsou v pořadí nebo mohou být záporné nebo řetězcové místo čísla.
Často kladené otázky a odpovědi
Otázka č. 1) Proč používáme kolekce v PL / SQL?
Odpovědět: Existují tři typy kolekcí - Vnořené tabulky, Asociativní pole a Varrays. Vnořené tabulky mohou ukládat náhodný počet prvků. Varrays mohou ukládat pevný počet prvků a asociativní pole nám umožňují vyhledávat prvky s náhodnými čísly a řetězci.
Otázka 2) Co je vnořená tabulka v PL / SQL?
Odpovědět: Vnořená tabulka má 1 rozměrný charakter a její velikost nezůstává pevná. Lze k nim přistupovat v blocích SQL a PL / SQL. Lze jej použít v záznamech, definicích objektů a tabulkách.
Otázka č. 3) Co je hromadná sbírka v Oracle PL / SQL?
Odpovědět: Hromadná kolekce je metoda získávání dat, když stroj PL / SQL informuje stroj SQL o hromadění více řádků najednou a jejich uložení do kolekce.
Otázka č. 4) Proč je hromadné shromažďování v Oracle rychlejší?
Odpovědět: Hromadné shromažďování zvyšuje výkon tím, že omezuje interakci mezi modulem PL / SQL a databází.
Otázka č. 5) Co je Varray v PL / SQL?
Odpovědět: Jedná se o datovou strukturu PL / SQL, která se používá k ukládání homogenní kolekce prvků stejného datového typu v sekvenci. Většinou se používá k uchovávání objednané sady dat.
Otázka č. 6) Můžeme odstranit prvek z Varray v Oracle?
Odpovědět: Nemůžeme přímo upravovat ani mazat prvky ve Varray pomocí příkazů SQL. Musíme vybrat Varray z tabulky, upravit ji v PL / SQL a poté upravit tabulku a uložit ji do nového Varray.
Otázka č. 7) Jaký je rozdíl mezi vnořenou tabulkou a Varray?
Odpověď: Rozdíly jsou uvedeny níže:
- Varray vezmeme, když je počet prvků znám dříve. Toto omezení není možné ve vnořených tabulkách.
- Ve Varray se prvky používají postupně. Vnořený stůl má husté i řídké vlastnosti.
- Prvky jsou vždy seřazeny ve Varray. Prvky mohou nebo nemusí být v pořadí ve vnořené tabulce.
Závěr
V tomto tutoriálu jsme podrobně diskutovali o některých základních pojmech PL / SQL, které jsou nezbytné pro rozvoj znalostí o něm.
Pokryli jsme následující témata uvedená níže:
- Základní znalost sbírek PL SQL (metody a výjimky).
- Varrays.
- Vnořené tabulky
- Rejstříkové tabulky
<< PREV Tutorial | DALŠÍ výukový program >>
Doporučené čtení
- Datové typy polí - int pole, dvojité pole, pole řetězců atd.
- Java Array - Jak tisknout prvky pole v Javě?
- Výukový program PL SQL pro začátečníky s příklady | Co je to PL / SQL
- Java Array - deklarovat, vytvořit a inicializovat pole v Javě
- Výukový program Java Array Length s příklady kódu
- Přesné rozdíly mezi SQL a NoSQL a vědět, kdy použít NoSQL a SQL
- Rozdíl mezi SQL Vs MySQL Vs SQL Server (s příklady)
- Vnořená třída JUnit 5: @Nested Tutorial s příklady