pl sql collections nested table
Naučite osnove PL SQL kolekcija, metoda sakupljanja, Varray, ugniježđenu tablicu i Associative Array uz pomoć primjera koda:
U PL / SQL potprogrami vodič za PL / SQL serija , naučili smo o procedurama i funkcijama, različitim metodama prosljeđivanja parametara i kako stvoriti / izbrisati procedure i funkcije u PL / SQL-u.
U ovom ćemo članku razgovarati o PL SQL kolekcijama i srodnim konceptima. Također ćemo objasniti koncept Varrays, ugniježđene tablice i tablice indeksiranja koje su dostupne u PL / SQL.
Osim toga, istražit ćemo neke ugrađene iznimke i metode prikupljanja.
Što ćete naučiti:
- PL SQL zbirke
- Ugnježđene tablice u PL / SQL
- Asocijativni niz ili indeksne tablice
- Varijable u PL / SQL
- Zaključak
PL SQL zbirke
Zbirka je skupina elemenata homogenih tipova podataka. Općenito sadrži nizove, popise, skupove i tako dalje. Svaki od elemenata ima određeni indeks koji odražava njegov položaj.
Zbirke PL SQL su sljedećih vrsta:
- Asocijativni niz / indeksirajuće tablice
- Ugniježđene tablice.
- Varijable.
PL SQL kolekcije obično se koriste za pohranu i manipulaciju velikim dijelovima podataka, koristeći ključnu riječ BULK COLLECT u Oracleu.
Metode prikupljanja
Pl / SQL ima neke ugrađene metode prikupljanja koje su navedene u nastavku.
Sl. Ne. | Ime | Opisi |
---|---|---|
7 | sljedeći (m) | Daje indeks koji slijedi mth indeks. |
1 | računati | Daje broj elemenata prisutnih u zbirci. |
dva | ograničiti | Provjerava veličinu zbirke. |
3 | postoji (m) | Vraća true ako mth element prisutan u zbirci else vraća false. |
4 | prvi | Daje početni indeksni broj u zbirci s cjelobrojnim indeksom. |
5 | posljednji | Daje završni indeksni broj u zbirci s cjelobrojnim indeksom. |
6 | produžiti | Dodaje NULL element na kraj zbirke. |
8 | prethodni (m) | Daje indeks koji prethodi indeksu m. |
9 | podrezati | Briše element s kraja zbirke. |
10 | obrezivanje (m) | Briše m elemenata s kraja zbirke. |
jedanaest | izbrisati | Briše sve elemente iz zbirke, postavljajući broj na 0. |
12 | izbriši (m) | Briše mth element iz zbirke, ako je mth element NULL, tada se ne izvršava nikakva radnja. |
13 | izbriši (m, k) | Briše element s mth na kth položaj. |
14 | produžiti (m) | Dodaje m element na kraj zbirke. |
petnaest | produžiti (m, k) | Dodaje m kopija k-tog elementa na kraj zbirke. |
Iznimke od zbirke
Neki od uobičajenih izuzetaka od zbirki su sljedeći:
- VALUE_ERROR: Ova se iznimka baca ako se indeks ne može pretvoriti u tip ključa ili je NULL. Ova se iznimka obično pokreće ako je ključ tipa PLS_INTEGER, a indeks izvan tog raspona.
- NIJE PRONAĐENO PODATAKA: Ovu iznimku baca PL / SQL ako ili naredba SELECT ne dohvaća redove ili program usmjerava na element koji se briše u ugniježđenoj tablici. Ovu iznimku može podići i element koji je neinicijaliziran u indeksnoj tablici.
- COLLECTION_IS_NULL: Ovu iznimku baca PL / SQL ako je zbirka prema zadanim postavkama NULL.
- SUBSCRIPT_BEYOND_COUNT: Ova se iznimka izbacuje kada je indeks veći od ukupnog broja broja elemenata u zbirci.
- PRETPLATI_OUTSIDE_LIMIT: Ova se iznimka izbacuje kada je indeks izvan raspona praga.
Ugnježđene tablice u PL / SQL
Ugniježđene tablice su poput tablice baze podataka s jednim stupcem ili 1-dimenzionalnog niza gdje je veličina polja dinamična. Njegov je indeks numeričkog tipa. Ugniježđenu tablicu možemo dobiti u varijablu davanjem redaka indeksom koji započinje s 1. Ova značajka čini je sličnom po prirodi poput niza.
Ugniježđena tablica može se držati u stupcu baze podataka. Također se može koristiti za manipuliranje SQL operacijama spajanjem tablica. Budući da je poput dinamičkog niza, tako da gornja granica može biti bilo koje veličine.
Ugniježđena tablica može imati i guste i rijetke karakteristike prikupljanja, što znači da se bilo koji element može slučajno izbrisati (čineći ga rijetkim) uz pomoć postupka IZBRIŠI. Brisanje podataka uzrokuje diskontinuitet u indeksu, ali funkcija NEXT pomaže u iteraciji do sljedećih indeksa. Budući da su podaci pohranjeni u obliku tablice, oni se mogu dohvatiti uz pomoć SELECT naredbi.
Ugniježđena tablica može se graditi na razini sheme ili u PL / SQL bloku. To je poput objekta baze podataka koji je dostupan unutar baze podataka ili potprograma.
Razlike između niza i ugniježđene tablice navedene su u nastavku:
- Veličina ugniježđenih tablica može se dinamički povećavati. Gornja granica niza je fiksna, ali nije fiksirana za ugniježđene tablice.
- Niz ima uzastopne indekse što ga čini gustim. Međutim, ugniježđena tablica je gusta u vrijeme stvaranja, ali postaje rijetka kad se elementi između njih izbrišu.
Sintaksa ugniježđene tablice:
TYPE <> IS TABLE OF <> (NOT NULL);
Ovdje, 'tip' je specifikator tipa. 'element' je vrsta podataka.
Implementacija koda s ugniježđenom tablicom:
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;
Izlaz gornjeg koda trebao bi biti:
Asocijativni niz ili indeksne tablice
Tablica indeksiranja obično se naziva asocijativni niz. Što se tiče strukture, i indeksna tablica i ugniježđene tablice slične su i imaju indeks za pristup elementima.
Asocijativni niz predstavljen je parom ključ / vrijednost. Svaki od jedinstvenih ključeva koristi se za identificiranje vrijednosti u polju. Tip podataka ključa može biti niz ili cijela vrijednost definirana tijekom stvaranja. Ključ se dodaje u indeksnu tablicu jednostavnim dodjeljivanjem vrijednosti po prvi put. Da bismo modificirali isti unos, moramo koristiti isti ključ.
Ključ bi trebao biti jedinstveni ili kao primarni ključ u tablici ili kombiniranjem nizova zajedno da bi se razvila jedinstvena vrijednost. Ova vrsta zbirke ima veličinu polja koja je dinamična i ima rijetke ili guste karakteristike. Jedna razlika između indeksirane tablice i ugniježđene tablice je ta što se prva ne može pohraniti u stupac baze podataka, ali ugniježđena tablica može biti pohranjena.
Asocijativni nizovi omogućuju jednostavno održavanje indeksa i kreiraju se u PL / SQL bloku. To je poput SQL tablice u kojoj se vrijednosti dobivaju uz pomoć primarnog ključa. To se obično koristi za privremenu pohranu podataka i može se koristiti umjesto SQL tablica radi izbjegavanja mrežnog prometa i pohrane na disku koje zahtijevaju SQL tablice.
Kako asocijativni nizovi ne pohranjuju trajne podatke, ne mogu se koristiti s SQL izrazima poput SELECT i INSERT. Međutim, mogu se učiniti neprekidnim za sesiju baze podataka deklariranjem njihove vrste podataka kao paketa i definiranjem unutar tijela paketa.
Sintaksa indeksne tablice:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Evo, 'ključ' je numerički. Može biti BINARY_INTEGER ili PLS_INTEGER. Njegov tip podataka može biti varchar, varchar2, long ili string. Ključ temeljen na varchar treba spomenuti s dužinom.
'element' je vrsta podataka.
'veličina' je maksimalan broj elemenata. To je pozitivan cijeli broj.
'tip' je specifikator tipa.
Implementacija koda s tablicom indeksa:
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; /
Izlaz gornjeg koda trebao bi biti:
Varijable u PL / SQL
Varrays pohranjuju fiksni broj elemenata i slični su jednodimenzionalnom nizu. Međutim, broj elemenata može se mijenjati tijekom izvođenja. To je uzastopni skup elemenata sličnih tipova podataka. Može se pohraniti u tablicu baze podataka kojom se može rukovati uz pomoć SQL izraza. Ali postupak nije tako jednostavan i fleksibilan kao u ugniježđenoj tablici.
Maksimalna veličina Varray-a definirana je u njegovoj definiciji tipa. Ima jedan za drugim memorijski aranžman koji započinje s 1 indeksom, a najmanja adresa lokacije pokazuje na početni element, a najviša adresa lokacije upućuje na krajnji element. Svi se elementi Varray-a identificiraju indeksom.
Ova vrsta zbirke ima numerički indeks i ima guste karakteristike. Stoga se elementi polja ne mogu brisati između. Ili treba izbrisati cijeli Varray ili njegov kraj može biti obrezan. Zbog svojih gustih karakteristika ima manju fleksibilnost upotrebe.
Varray se može stvoriti ili u PL / SQL bloku ili na razini sheme. Tretira se kao objekt baze podataka kojemu se može pristupiti unutar baze podataka ili unutar potprograma. Varijala se koristi češće kad nam je poznata veličina niza. Treba ih inicijalizirati prije njihove upotrebe, a može se inicijalizirati uz pomoć konstruktora. Njegova je vrijednost NULL kada je deklarirana i treba je inicijalizirati prije pozivanja na njene elemente.
Sintaksa Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Ovdje,
'tip' je specifikator tipa.
'element' je vrsta podataka.
'veličina' je maksimalan broj elemenata u nizu. To je pozitivan cijeli broj.
Izjava i inicijalizacija varijabli varijabli
Nakon stvaranja Varray-a, možemo ga prijaviti na način opisan u nastavku:
Sintaksa:
name type_n (:= type_n(...));
Ovdje,
'Ime' je naziv Varray.
'Type_n' je tip Varray.
‘Type_n (…)’ je konstruktor tipa Varray. Popisi argumenata spominju se odvajačem zarezom i tipa Varray.
Moramo inicijalizirati varijablu Varray prije nego što je upotrijebimo, jer ona daje neinicijaliziranu pogrešku prikupljanja. Inicijalizacija se vrši na dolje opisani način.
Sintaksa:
name type_n := type_n();
Ovo će inicijalizirati varijablu s nula elemenata. Da bi se popunili elementi u varijablama varijable, sintaksa je:
name type_n := type_n(e1, e2, ...);
Pristup elementima varijable
Elementima se može pristupiti dolje opisanim postupkom:
ime (m); gdje je m indeks elemenata koji započinje s 1 i završava s maksimalnim brojem broja elemenata tipa Varray. U slučaju da je m izvan raspona 1 i maksimalnog broja elemenata, SUBSCRIPT_BEYOND_COUNT iznimku baca PL / SQL.
Veličina Varray-a može se mijenjati uz pomoć izraza ALTER.
Implementacija koda s ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Izlaz gornjeg koda trebao bi biti.
java prosljeđuje niz metodi vrijednosti
Implementacija koda s 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; /
Izlaz gornjeg koda trebao bi biti:
Razlike između varijabli i ugniježđenih tablica
Razlike su sljedeće:
- Dok radimo na scenariju u kojem je poznat broj elemenata i oni su poredani uzastopno, obično se koriste varijable. Varijala koja je pohranjena u bazi podataka održava svoje indekse i redoslijed. Uvijek se održava kao jedan objekt. Dok se ugniježđene tablice koriste kada broj broja elemenata nije ograničen.
- Ugniježđena tablica ima rijetke karakteristike koje joj omogućuju uklanjanje bilo kojeg elementa iz bilo kojeg položaja, a ne uvijek s kraja. Redoslijed i indeks ugniježđene tablice ne održavaju se kada je pohranjena u bazu podataka. Elementi Varray-a uvijek se održavaju u slijedu.
Razlike između asocijativnih nizova i ugniježđenih tablica
Razlike su sljedeće:
- Ugnježđene tablice mogu se pohraniti u stupac baze podataka, ali asocijativni nizovi ne. U ugniježđene tablice održavaju se ispravni odnosi podataka koji se neprestano pohranjuju.
- Asocijativni nizovi dobri su za male tablice pretraživanja gdje se zbirka može ugraditi u memoriju svaki put kad se paket inicijalizira ili se pozove postupak. Dobar su izbor kada se veličina prethodno ne zna. Vrijednosti indeksa asocijativnog polja fleksibilne su jer indeksi ovog niza nisu u slijedu ili mogu biti negativni ili niz umjesto broja.
Često postavljana pitanja i odgovori
P # 1) Zašto koristimo zbirke u PL / SQL-u?
Odgovor: Postoje tri vrste zbirki - ugniježđene tablice, Asocijativni nizovi i Varijevi. U ugniježđene tablice može se pohraniti slučajan broj elemenata. Varijable mogu pohraniti fiksni broj elemenata, a asocijativni nizovi omogućuju nam pretraživanje elemenata sa slučajnim brojevima i nizovima.
P # 2) Što je ugniježđena tablica u PL / SQL?
Odgovor: Ugniježđena tablica je jednodimenzionalne prirode i njezina veličina ne ostaje fiksna. Njima se može pristupiti u SQL i PL / SQL blokovima. Može se koristiti u zapisima, definicijama objekata i tablicama.
P # 3) Što je skupna kolekcija u Oracle PL / SQL-u?
Odgovor: Skupna zbirka metoda je dobivanja podataka kada PL / SQL mehanizam obavještava SQL mehanizam da odjednom akumulira više redaka i pohranjuje ih u zbirku.
P # 4) Zašto je skupljanje podataka brže u Oracleu?
Odgovor: Skupno prikupljanje poboljšava performanse smanjenjem interakcije između PL / SQL mehanizma i baze podataka.
P # 5) Što je Varray u PL / SQL?
Odgovor: To je PL / SQL struktura podataka koja se koristi za spremanje homogene zbirke elemenata istog tipa podataka u niz. Uglavnom se koristi za držanje uređenog skupa podataka.
P # 6) Možemo li izbrisati element iz Varraya u Oracleu?
Odgovor: Ne možemo izravno mijenjati ili brisati elemente u Varrayu uz pomoć SQL izraza. Moramo odabrati Varray iz tablice, izmijeniti ga u PL / SQL, a zatim izmijeniti tablicu i pohraniti u novi Varray.
P # 7) Koja je razlika između ugniježđene tablice i polja?
Odgovor: Razlike su navedene u nastavku:
- Varray uzimamo kad je broj elemenata poznat otprije. Ovo ograničenje nije moguće u ugniježđenim tablicama.
- U Varray-u se elementi koriste u nizu. Ugniježđena tablica ima i guste i rijetke karakteristike.
- Elementi su uvijek poredani u Varrayu. Elementi mogu ili ne moraju biti u redu u ugniježđenoj tablici.
Zaključak
U ovom uputstvu detaljno smo raspravljali o nekim osnovnim konceptima PL / SQL-a koji su ključni za razvijanje znanja o njemu.
Obradili smo sljedeće teme navedene u nastavku:
- Osnovno razumijevanje PL SQL kolekcija (metode i iznimke).
- Varijable.
- Ugniježđene tablice
- Indeksne tablice
<< PREV Tutorial | SLJEDEĆA Vodič >>
Preporučena literatura
- Tipovi podataka niza - int niz, dvostruki niz, niz žica itd.
- Java Array - Kako ispisati elemente niza u Javi?
- PL SQL Vodič za početnike s primjerima | Što je PL / SQL
- Java Array - Deklariranje, stvaranje i inicijalizacija niza u Javi
- Vodič o dužini Java polja s primjerima koda
- SQL vs NoSQL Točne razlike i znajte kada koristiti NoSQL i SQL
- Razlika između SQL Vs MySQL Vs SQL Server (s primjerima)
- JUnit 5 Ugnježđena klasa: @Gniježđena lekcija s primjerima