pl sql collections nested table
Aflați elementele de bază ale colecțiilor PL SQL, metodelor de colectare, Varray, tabelului imbricat și Aranjament asociativ cu ajutorul exemplelor de cod:
În Subprograme PL / SQL tutorial de Seria PL / SQL , am aflat despre proceduri și funcții, diferite metode de trecere a parametrilor și despre cum să creați / ștergeți proceduri și funcții în PL / SQL.
În acest articol, vom discuta despre colecțiile PL SQL și despre conceptele conexe. De asemenea, vom explica conceptul de Varrays, tabele imbricate și tabele index-by care sunt disponibile în PL / SQL.
În plus, vom explora câteva dintre excepțiile și metodele de colectare încorporate.
Ce veți învăța:
- PL SQL Colecții
- Tabelele imbricate în PL / SQL
- Tablou asociativ sau tabele indexate
- Varrays în PL / SQL
- Concluzie
PL SQL Colecții
O colecție este un grup de elemente ale tipurilor de date omogene. În general, cuprinde tablouri, liste, seturi și așa mai departe. Fiecare dintre elemente are un anumit indice care reflectă poziția sa.
Colecțiile PL SQL sunt de următoarele tipuri:
- Tabele Asociative Array / Index-by
- Tabelele imbricate.
- Varrays.
Colecțiile PL SQL sunt utilizate în general pentru stocarea și manipularea unor bucăți mari de date, utilizând cuvântul cheie BULK COLLECT în Oracle.
Metode de colectare
Pl / SQL are câteva metode încorporate în colecție, care sunt enumerate mai jos.
Sl. Nu. | Nume | Descrieri |
---|---|---|
7 | următor (m) | Oferă indicele care reușește indexul m. |
unu | numara | Oferă numărul de elemente prezente în colecție. |
Două | limită | Verifică dimensiunea colecției. |
3 | exista (m) | Returnează true dacă elementul mth prezent în colecție returnează false. |
4 | primul | Oferă numărul indexului de început în colecție cu indicele întreg. |
5 | ultimul | Oferă numărul de index final în colecție cu indicele întreg. |
6 | extinde | Adaugă element NULL la sfârșitul colecției. |
8 | anterior (m) | Oferă indexul care precede indexul m. |
9 | tunde | Șterge un element de la sfârșitul colecției. |
10 | tăia (m) | Șterge m elemente de la sfârșitul colecției. |
unsprezece | șterge | Șterge toate elementele din colecție, setând numărul la 0. |
12 | șterge (m) | Șterge elementul mth din colecție, dacă elementul mth este NULL, atunci nu se efectuează nicio acțiune. |
13 | șterge (m, k) | Șterge elementul de la poziția mth la kth. |
14 | extinde (m) | Adaugă element m la capătul colecției. |
cincisprezece | extinde (m, k) | Adaugă m copii ale celui de-al cincilea element la sfârșitul colecției. |
Excepții de colecție
Unele dintre excepțiile comune de colectare sunt următoarele:
- VALUE_ERROR: Această excepție este aruncată dacă un indice nu poate fi convertit la tipul de cheie sau este NULL. Această excepție este ridicată în mod normal dacă o cheie este de tipul PLS_INTEGER și indicele se află dincolo de acest interval.
- NU S-AU GASIT DATE: Această excepție este aruncată de PL / SQL dacă fie o instrucțiune SELECT nu preia niciun rând sau un program indică un element care este șters într-un tabel imbricat. Această excepție poate fi ridicată și de un element care nu este inițializat într-un tabel index-by.
- COLLECTION_IS_NULL: Această excepție este aruncată de PL / SQL dacă colecția este NULL în mod implicit.
- SUBSCRIPT_BEYOND_COUNT: Această excepție este aruncată atunci când un indice este mai mare decât numărul total al numărului de elemente din colecție.
- SUBSCRIPT_OUTSIDE_LIMIT: Această excepție este aruncată atunci când un indice depășește intervalul de prag.
Tabelele imbricate în PL / SQL
Tabelele imbricate sunt ca un tabel de baze de date cu o singură coloană sau un tablou 1-dimensional în care dimensiunea tabloului este dinamică. Indicele său este de tip numeric. Putem obține tabelul imbricat într-o variabilă dând rândurilor un indice care începe cu 1. Această caracteristică îl face similar în natură ca un tablou.
Un tabel imbricat poate fi păstrat într-o coloană a unei baze de date. Poate fi folosit și pentru manipularea operațiunilor SQL prin alăturarea tabelelor. Deoarece este ca un tablou dinamic, astfel încât limita superioară poate fi de orice dimensiune.
Un tabel imbricat poate avea atât caracteristici de colectare dense, cât și rare, ceea ce înseamnă că orice element poate fi șters în mod aleatoriu (făcându-l rar) cu ajutorul procedurii DELETE. Ștergerea datelor provoacă o discontinuitate în index, dar funcția NEXT ajută la iterarea la următorii indici. Deoarece datele sunt stocate sub forma unui tabel, acestea pot fi recuperate cu ajutorul instrucțiunilor SELECT.
Un tabel imbricat poate fi construit la nivelul schemei sau în blocul PL / SQL. Este ca un obiect de bază de date care este accesibil în baza de date sau subprogram.
Diferențele dintre tabelul Array și tabelul imbricat sunt enumerate mai jos:
- Dimensiunea tabelelor imbricate poate fi mărită dinamic. Limita superioară a unui tablou este fixă, dar nu este fixată pentru tabelele imbricate.
- Matricea are indicii consecutivi, ceea ce îl face dens. Cu toate acestea, un tabel imbricat este dens în momentul creării, dar devine rar odată ce elementele sunt șterse între ele.
Sintaxa tabelului imbricat:
TYPE <> IS TABLE OF <> (NOT NULL);
Aici, 'tip' este specificatorul de tip. 'element' este tipul de date.
Implementarea codului cu tabelul imbricat:
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;
Ieșirea codului de mai sus ar trebui să fie:
Tablou asociativ sau tabele indexate
Tabelul index-by este denumit în mod obișnuit matrice asociativă. În ceea ce privește structura, atât tabelul index-by, cât și tabelele imbricate sunt similare și au subscript pentru a accesa elementele.
O matrice asociativă este reprezentată de o pereche cheie-valoare. Fiecare dintre cheile unice este utilizată pentru a identifica valoarea din matrice. Tipul de date al cheii poate fi un șir sau un număr întreg definit în timpul creării acesteia. O cheie este adăugată tabelului index-by prin simpla atribuire a unei valori pentru prima dată. Pentru a modifica aceeași intrare, trebuie să folosim aceeași cheie.
Cheia ar trebui să fie una unică fie ca cheie primară într-un tabel, fie prin combinarea șirurilor împreună pentru a dezvolta o valoare unică. Acest tip de colecție are o dimensiune a matricei care este dinamică și are caracteristici rare sau dense. O diferență între tabelul index-by și tabelul imbricat este că primul nu poate fi stocat în coloana bazei de date, dar tabelul imbricat poate fi stocat.
Tablourile asociative asigură întreținerea ușoară a indicelui și sunt create într-un bloc PL / SQL. Este ca un tabel SQL în care valorile sunt obținute cu ajutorul cheii primare. Acest lucru este utilizat în general pentru stocarea temporară a datelor și poate fi utilizat în locul tabelelor SQL pentru a evita traficul de rețea și stocarea pe disc cerute de tabelele SQL.
Deoarece matricile asociative nu stochează date persistente, ele nu pot fi utilizate cu instrucțiuni SQL precum SELECT și INSERT. Cu toate acestea, pot fi făcute nesfârșite pentru o sesiune a bazei de date declarând tipul lor de date ca pachet și definindu-le în corpul pachetului.
Sintaxa tabelului index-by:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Aici 'cheie' este numeric. Poate fi BINARY_INTEGER sau PLS_INTEGER. Tipul său de date poate fi varchar, varchar2, lung sau șir. Cheia bazată pe varchar ar trebui menționată cu lungimea.
'element' este tipul de date.
'mărimea' este numărul maxim de elemente. Este un număr întreg pozitiv.
'tip' este specificatorul de tip.
Implementarea codului cu tabelul index-by:
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; /
Ieșirea codului de mai sus ar trebui să fie:
Varrays în PL / SQL
Varrays stochează un număr fix de elemente și sunt ca un tablou unidimensional. Cu toate acestea, numărul de elemente poate fi modificat în timpul rulării. Este un set consecutiv de elemente de tipuri de date similare. Poate fi stocat într-un tabel de baze de date care poate fi tratat cu ajutorul instrucțiunilor SQL. Dar procesul nu este la fel de ușor și flexibil ca într-un tabel imbricat.
Dimensiunea maximă a Varray este definită în definiția tipului său. Are un aranjament de memorie unul după altul care începe cu 1 index și cea mai mică adresă de locație indică elementul de pornire și cea mai înaltă adresă de locație indică elementul final. Toate elementele unui Varray sunt identificate cu un index.
Acest tip de colecție are un indice numeric și are caracteristici dense. Astfel, elementele matricei nu pot fi șterse între ele. Fie întregul Varray ar trebui șters, fie sfârșitul acestuia poate fi tăiat. Datorită caracteristicilor sale dense, are o flexibilitate mai mică de utilizare.
Varray poate fi creat fie într-un bloc PL / SQL, fie la nivelul schemei. Este tratat ca un obiect de bază de date care poate fi accesat în baza de date sau în cadrul unui subprogram. Varray este utilizat mai frecvent atunci când dimensiunea matricei este cunoscută de noi. Ar trebui inițializat înainte de a le utiliza și poate fi inițializat cu ajutorul unui constructor. Valoarea sa este NULL când este declarată și ar trebui inițializată înainte de a face referire la elementele sale.
Sintaxa lui Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Aici,
'tip' este specificatorul de tip.
'element' este tipul de date.
'mărimea' este numărul maxim de elemente dintr-o matrice. Este un număr întreg pozitiv.
Declarație și inițializare a variabilelor Varray
După crearea unui Varray, îl putem declara în modul descris mai jos:
Sintaxă:
name type_n (:= type_n(...));
Aici,
'Nume' este numele Varray.
„Tip_n” este tipul de Varray.
„Tip_n (...)” este constructorul de tip Varray. Listele de argumente sunt menționate de un separator de virgule și de tipul Varray.
Trebuie să inițializăm o variabilă Varray înainte de a o folosi, altfel dă eroare de colectare neinițializată. Inițializarea se face în modul descris mai jos.
Sintaxă:
name type_n := type_n();
Aceasta va inițializa variabila cu zero elemente. Pentru a completa elemente din variabilele varray, sintaxa este:
name type_n := type_n(e1, e2, ...);
Accesarea Elementelor Varray
Elementele pot fi accesate prin procesul descris mai jos:
nume (m); unde m este indicele elementului care începe cu 1 și se termină cu numărul maxim al numărului de elemente de tip Varray. În cazul în care m depășește intervalul 1 și numărul maxim al numărului de elemente, SUBSCRIPT_BEYOND_COUNT excepția este aruncată de PL / SQL.
Dimensiunea Varray poate fi modificată cu ajutorul instrucțiunii ALTER.
Implementarea codului cu ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Ieșirea codului de mai sus ar trebui să fie.
primele 10 descărcătoare de muzică pentru Android
Implementarea codului cu 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; /
Ieșirea codului de mai sus ar trebui să fie:
Diferențe între Varrays și tabele imbricate
Diferențele sunt următoarele:
- În timp ce lucrăm la un scenariu în care numărul elementelor este cunoscut și sunt aranjate secvențial, Varrays sunt utilizate în general. Un Varray care este stocat într-o bază de date își menține indicii și secvența. Este întotdeauna menținut ca un singur obiect. În timp ce, tabelele imbricate sunt utilizate atunci când numărul numărului de elemente nu este restricționat.
- Tabelul imbricat are caracteristici rare care îi permit să elimine orice element din orice poziție și nu întotdeauna de la capăt. Ordinea și indicele unui tabel imbricat nu sunt menținute atunci când este stocat în baza de date. Elementele din Varray sunt întotdeauna menținute în ordine.
Diferențele dintre tablourile asociative și tabelele imbricate
Diferențele sunt următoarele:
- Tabelele imbricate pot fi stocate într-o coloană a bazei de date, dar matricile asociative nu sunt. Tabelele imbricate mențin relații de date adecvate care sunt stocate în mod persistent.
- Tablourile asociative sunt bune pentru micile tabele de căutare în care colecția poate fi construită în memorie de fiecare dată când este inițializat un pachet sau se apelează o procedură. Sunt o alegere bună atunci când dimensiunea nu este cunoscută în prealabil. Valorile indexului unui tablou asociativ sunt flexibile, deoarece indicii acestui tablou nu sunt în ordine sau pot fi negative sau un șir în loc de un număr.
Întrebări și răspunsuri frecvente
Q # 1) De ce folosim colecțiile în PL / SQL?
Răspuns: Există trei tipuri de colecții - tabele imbricate, tablouri asociative și Varrays. Tabelele imbricate pot stoca un număr aleatoriu de elemente. Varrays pot stoca un număr fix de elemente, iar matricile asociative ne permit să căutăm elemente cu numere aleatorii și șiruri.
Q # 2) Care este tabelul imbricat în PL / SQL?
Răspuns: Un tabel imbricat are 1 dimensiune în natură și dimensiunea sa nu rămâne fixă. Acestea pot fi accesate în blocuri SQL și PL / SQL. Poate fi utilizat în înregistrări, definiții de obiecte și tabele.
Î # 3) Ce este o colecție în bloc în Oracle PL / SQL?
Răspuns: O colecție în bloc este o metodă de obținere a datelor atunci când motorul PL / SQL informează motorul SQL să acumuleze mai multe rânduri simultan și să le stocheze într-o colecție.
Q # 4) De ce colectarea în bloc este mai rapidă în Oracle?
Răspuns: Colectarea în bloc îmbunătățește performanța prin reducerea interacțiunii dintre motorul PL / SQL și baza de date.
Q # 5) Ce este Varray în PL / SQL?
Răspuns: Este o structură de date PL / SQL care este utilizată pentru a stoca o colecție omogenă de elemente de același tip de date într-o secvență. Este folosit mai ales pentru a păstra un set ordonat de date.
Q # 6) Putem șterge elementul din Varray în Oracle?
Răspuns: Nu putem modifica sau șterge elemente dintr-un Varray cu ajutorul instrucțiunilor SQL direct. Trebuie să selectăm Varray din tabel, să-l modificăm în PL / SQL, apoi să modificăm tabelul și să-l stocăm într-un nou Varray.
Q # 7) Care este diferența dintre Tabelul cuibărit și Varray?
Răspuns: Diferențele sunt enumerate mai jos:
- Luăm Varray atunci când numărul elementelor este cunoscut dinainte. Această restricție nu este posibilă în tabelele imbricate.
- În Varray, elementele sunt utilizate în ordine. Tabelul imbricat are atât caracteristici dense, cât și rare.
- Elementele sunt întotdeauna ordonate în Varray. Elementele pot fi sau nu în ordine în tabelul imbricat.
Concluzie
În acest tutorial, am discutat în detaliu câteva dintre conceptele de bază ale PL / SQL, care sunt esențiale în dezvoltarea cunoștințelor despre acesta.
Am acoperit următoarele subiecte enumerate mai jos:
- Înțelegerea de bază a colecțiilor PL SQL (metode și excepții).
- Varrays.
- Tabelele imbricate
- Tabelele indexate
<< PREV Tutorial | URMĂTOARE Tutorial >>
Lectură recomandată
- Tipuri de date matrice - matrice int, matrice dublă, matrice de șiruri etc.
- Java Array - Cum se imprimă elemente ale unui array în Java?
- Tutorial PL SQL pentru începători cu exemple | Ce este PL / SQL
- Java Array - Declarați, creați și inițializați o matrice în Java
- Tutorial Java Lungime matrice cu exemple de cod
- SQL vs NoSQL Diferențe exacte și știți când să utilizați NoSQL și SQL
- Diferența dintre SQL și MySQL împotriva SQL Server (cu exemple)
- JUnit 5 Clasa imbricată: @ Tutorial imbricat cu exemple