pl sql collections nested table
Spoznajte osnove zbirk PL SQL, metod zbiranja, Varray, ugnezdene tabele in Associative Array s pomočjo primerov kode:
V Podprogrami PL / SQL vadnica PL / SQL serije , spoznali smo postopke in funkcije, različne metode posredovanja parametrov ter kako ustvariti / izbrisati postopke in funkcije v PL / SQL.
V tem članku bomo obravnavali zbirke PL SQL in z njimi povezane koncepte. Razložili bomo tudi koncept Spremenljivke, ugnezdene tabele in indeksne tabele, ki so na voljo v PL / SQL.
Poleg tega bomo raziskali nekaj vgrajenih izjem in načinov zbiranja.
Kaj se boste naučili:
- Zbirke PL SQL
- Vgnezdene tabele v PL / SQL
- Povezovalne matrike ali indeksne tabele
- Spremenljivke v PL / SQL
- Zaključek
Zbirke PL SQL
Zbirka je skupina elementov homogenih podatkovnih tipov. Na splošno vsebuje nize, sezname, nize itd. Vsak od elementov ima določen podpis, ki odraža njegov položaj.
Zbirke PL SQL so naslednjih vrst:
- Povezovalne matrike / indeksne tabele
- Vgnezdene tabele.
- Spremenljivke.
Zbirke PL SQL se običajno uporabljajo za shranjevanje in obdelavo velikih kosov podatkov z uporabo ključne besede BULK COLLECT v Oracle.
Metode zbiranja
Pl / SQL ima nekaj vgrajenih metod zbiranja, ki so navedene spodaj.
Sl. Ne | Ime | Opisi |
---|---|---|
7. | naslednji (m) | Daje indeks, ki sledi mth indeksu. |
1. | štetje | Podaja število elementov, prisotnih v zbirki. |
dva | meja | Preveri velikost zbirke. |
3. | obstaja (m) | Vrne true, če element mth, ki je prisoten v zbirki else, vrne false. |
4. | najprej | Daje začetno indeksno številko v zbirki s celoštevilčnim podpisom. |
5. | zadnji | Daje končno indeksno številko v zbirki s celoštevilčnim podpisom. |
6. | podaljšati | Na koncu zbirke doda element NULL. |
8. | prejšnji (m) | Poda indeks, ki je pred indeksom m. |
9. | trim | Izbriše element s konca zbirke. |
10. | obrezovanje (m) | Izbriše m elementov s konca zbirke. |
enajst | izbriši | Izbriše vse elemente iz zbirke, pri čemer je število nastavljeno na 0. |
12. | izbriši (m) | Izbriše mth element iz zbirke, če je mth element NULL, se ne izvede nobeno dejanje. |
13. | izbriši (m, k) | Izbriše element iz mth v kth položaj. |
14. | podaljšati (m) | Doda element m na koncu zbirke. |
petnajst | podaljšati (m, k) | Na konec zbirke doda m kopij k-tega elementa. |
Izjeme pri zbiranju
Nekatere pogoste izjeme pri zbiranju so naslednje:
- NAPAKA VALUE: Ta izjema se vrne, če podpisnika ni mogoče pretvoriti v tip ključa ali je NULL. Ta izjema se običajno sproži, če je ključ tipa PLS_INTEGER in je indeks zunaj tega obsega.
- NO_DATA_FOUND: PL / SQL vrne to izjemo, če stavek SELECT ne prikliče nobene vrstice ali program kaže na element, ki je izbrisan v ugnezdeni tabeli. To izjemo lahko sproži tudi element, ki je neinicializiran v indeksni tabeli.
- COLLECTION_IS_NULL: PL / SQL vrne to izjemo, če je zbirka privzeto NULL.
- SUBSCRIPT_BEYOND_COUNT: Ta izjema se vrne, če je indeks večji od skupnega števila elementov v zbirki.
- SUBSCRIPT_OUTSIDE_LIMIT: Ta izjema se vrne, če je indeks večji od praga.
Vgnezdene tabele v PL / SQL
Vgnezdene tabele so kot tabela baze podatkov z enim stolpcem ali enodimenzionalno polje, kjer je velikost polja dinamična. Njegov podpis je numeričnega tipa. Vgnezdeno tabelo lahko dobimo v spremenljivko tako, da vrsticam damo podpis, ki se začne s 1. Ta funkcija je po naravi podobna kot matrika.
Vgnezdena tabela se lahko zadrži v stolpcu baze podatkov. Uporablja se lahko tudi za manipulacijo SQL operacij z združevanjem tabel. Ker je kot dinamično polje, je lahko zgornja meja poljubne velikosti.
Vgnezdena tabela ima lahko tako goste kot redke značilnosti zbiranja, kar pomeni, da je mogoče kateri koli element naključno izbrisati (zaradi česar je redek) s pomočjo postopka DELETE. Brisanje podatkov povzroči diskontinuiteto indeksa, vendar funkcija NEXT pomaga iteracijo do naslednjih indeksov. Ker so podatki shranjeni v obliki tabele, jih je mogoče pridobiti s pomočjo stavkov SELECT.
Vgnezdeno tabelo lahko zgradite na ravni sheme ali v bloku PL / SQL. Je kot objekt baze podatkov, ki je dostopen znotraj baze podatkov ali podprograma.
Razlike med matriko in ugnezdeno tabelo so navedene spodaj:
- Velikost ugnezdenih tabel je mogoče dinamično povečati. Zgornja meja polja je določena, za ugnezdene tabele pa ni določena.
- Niz ima zaporedne indekse, zaradi česar je gost. Vendar je ugnezdena tabela v času ustvarjanja gosta, vendar postane redka, ko se elementi vmes izbrišejo.
Sintaksa ugnezdene tabele:
TYPE <> IS TABLE OF <> (NOT NULL);
Tukaj, 'Tip' je specifikator tipa. 'Element' je podatkovni tip.
Izvedba kode z ugnezdeno tabelo:
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;
Rezultat zgornje kode mora biti:
Povezovalne matrike ali indeksne tabele
Tabela za indeksiranje se običajno imenuje asociativna matrika. Kar zadeva strukturo, sta si tabela indeksirana in ugnezdena tabela podobni in imata podpis za dostop do elementov.
Asociativno matriko predstavlja par ključ-vrednost. Vsak od unikatnih ključev se uporablja za identifikacijo vrednosti v matriki. Podatkovni tip ključa je lahko niz ali celo število, določeno med ustvarjanjem. Ključ se doda v indeksno tabelo tako, da prvič preprosto dodelite vrednost. Če želimo spremeniti isti vnos, moramo uporabiti isti ključ.
Ključ mora biti enoličen bodisi kot primarni ključ v tabeli bodisi z združevanjem nizov, da se razvije edinstvena vrednost. Ta vrsta zbirke ima velikost matrike, ki je dinamična in ima bodisi redke bodisi goste lastnosti. Ena razlika med tabelo po indeksu in ugnezdeno tabelo je ta, da prve ni mogoče shraniti v stolpec baze podatkov, vendar jo lahko ugnezdene tabele.
Asociativni nizi omogočajo enostavno vzdrževanje indeksa in so ustvarjeni v bloku PL / SQL. Je kot tabela SQL, kjer se vrednosti pridobijo s pomočjo primarnega ključa. To se običajno uporablja za začasno shranjevanje podatkov in se lahko uporablja namesto tabel SQL, da bi se izognili omrežnemu prometu in shranjevanju na disku, ki ga zahtevajo tabele SQL.
Ker asociativna polja ne shranjujejo trajnih podatkov, jih ni mogoče uporabiti s stavki SQL, kot sta SELECT in INSERT. Lahko pa postanejo neskončni za sejo baze podatkov, tako da njihov podatkovni tip navedejo kot paket in jih opredelijo znotraj telesa paketa.
Sintaksa tabele za indeksiranje:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Tukaj 'Ključ' je številčno. Lahko je BINARY_INTEGER ali PLS_INTEGER. Njegov podatkovni tip je lahko varchar, varchar2, long ali string. Ključ na osnovi varchar je treba omeniti z dolžino.
'Element' je podatkovni tip.
'Velikost' je največje število elementov. To je pozitivno celo število.
'Tip' je specifikator tipa.
Izvedba kode s tabelo po indeksu:
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; /
Rezultat zgornje kode mora biti:
Spremenljivke v PL / SQL
Varrays shranjujejo določeno število elementov in so kot enodimenzionalna matrika. Število elementov pa je mogoče spremeniti med izvajanjem. Gre za zaporedni nabor elementov podobnih podatkovnih vrst. Lahko se shrani v tabelo baze podatkov, ki jo je mogoče obdelati s pomočjo stavkov SQL. Toda postopek ni tako enostaven in prilagodljiv kot v ugnezdeni tabeli.
Največja velikost Varray je definirana v definiciji njegovega tipa. Ima eno za drugo razporeditev pomnilnika, ki se začne z enim podpisom in naslov najnižje lokacije kaže na začetni element, najvišji naslov lokacije pa na končni element. Vsi elementi spremenljivke so identificirani z indeksom.
Ta vrsta zbirke ima številčni podpis in ima goste lastnosti. Tako elementov matrike vmes ni mogoče izbrisati. Bodisi je treba izbrisati celotno različico ali pa jo je mogoče obrezati. Zaradi gostih lastnosti ima manj prilagodljivosti uporabe.
Varray je mogoče ustvariti v bloku PL / SQL ali na ravni sheme. Obravnava se kot objekt baze podatkov, do katerega je mogoče dostopati znotraj baze podatkov ali znotraj podprograma. Spreminjanje se uporablja pogosteje, ko nam je znana velikost polja. Pred njihovo uporabo ga je treba inicializirati in ga je mogoče inicializirati s pomočjo konstruktorja. Njegova vrednost je NULL, ko je deklarirana in jo je treba inicializirati, preden se sklicuje na njene elemente.
Sintaksa Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Tukaj,
'Tip' je specifikator tipa.
'Element' je podatkovni tip.
'Velikost' je največje število elementov v matriki. To je pozitivno celo število.
Izjava in inicializacija spremenljivk spremenljivke
Po ustvarjanju Varray-a ga lahko prijavimo na spodaj opisani način:
Sintaksa:
name type_n (:= type_n(...));
Tukaj,
'Ime' je ime Varray.
‘Type_n’ je vrsta Varray.
‘Type_n (…)’ je konstruktor tipa Varray. Seznami argumentov so omenjeni z ločilom vejic in tipa Varray.
Spremenljivko Varray moramo inicializirati, preden jo uporabimo, sicer povzroči neinicializirano napako zbirke. Inicializacija se izvede na spodaj opisan način.
Sintaksa:
name type_n := type_n();
To bo inicializiralo spremenljivko z nič elementi. Da bi izpolnili elemente v spremenljivkah spremenljivke, sintaksa je:
name type_n := type_n(e1, e2, ...);
Dostop do elementov spremenljivke
Do elementov je mogoče dostopati po postopku, opisanem spodaj:
ime (m); kjer je m indeks elementov, ki se začne z 1 in konča z največjim številom števila elementov tipa Varray. Če m presega obseg 1 in največje število elementov, SUBSCRIPT_BEYOND_COUNT izjemo vrne PL / SQL.
Velikost Varray lahko spremenite s pomočjo stavka ALTER.
Izvajanje kode z ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Rezultat zgornje kode mora biti.
vprašanja za intervju s selenom za 8 let izkušenj
Izvajanje kode z 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; /
Rezultat zgornje kode mora biti:
Razlike med spremenljivkami in ugnezdenimi tabelami
Razlike so naslednje:
- Medtem ko delamo na scenariju, ko je število elementov znano in so razporejeni zaporedno, se na splošno uporabljajo spremenljivke. Varray, ki je shranjen v zbirki podatkov, ohranja svoje indekse in zaporedje. Vedno se vzdržuje kot en sam predmet. Ker se ugnezdene tabele uporabljajo, kadar število elementov ni omejeno.
- Vgnezdena tabela ima redke značilnosti, ki ji omogočajo, da odstrani kateri koli element s katerega koli položaja in ne vedno s konca. Vrstni red in indeks ugnezdene tabele se ne shranita, ko je shranjena v bazi podatkov. Elementi Varray se vedno vzdržujejo v zaporedju.
Razlike med asociativnimi nizi in ugnezdenimi tabelami
Razlike so naslednje:
- Vgnezdene tabele lahko shranite v stolpec baze podatkov, asociativni nizi pa ne. Vgnezdene tabele vzdržujejo ustrezna podatkovna razmerja, ki se trajno shranjujejo.
- Asociativni nizi so dobri za majhne iskalne tabele, kjer je zbirko mogoče vgraditi v pomnilnik vsakič, ko se paket inicializira ali pokliče postopek. So dobra izbira, kadar velikost vnaprej ni znana. Vrednosti indeksa asociativne matrike so prilagodljive, saj indeksi te matrike niso v zaporedju ali so lahko namesto števila negativni ali niz.
Pogosta vprašanja in odgovori
V # 1) Zakaj uporabljamo zbirke v PL / SQL?
Odgovor: Obstajajo tri vrste zbirk - ugnezdene tabele, asociativni nizi in spremenljivke. V ugnezdene tabele lahko shranite naključno število elementov. Spremenljivke lahko shranijo določeno število elementov, asociativni nizi pa nam omogočajo iskanje elementov z naključnimi števili in nizi.
V # 2) Kaj je ugnezdena tabela v PL / SQL?
Odgovor: Vgnezdena tabela je enorazsežne narave in njena velikost ne ostane nespremenjena. Do njih je mogoče dostopati v blokih SQL in PL / SQL. Uporablja se lahko v zapisih, definicijah objektov in tabelah.
V # 3) Kaj je množično zbiranje v Oracle PL / SQL?
Odgovor: Skupinsko zbiranje je metoda pridobivanja podatkov, ko mehanizem PL / SQL obvesti mehanizem SQL, da nabere več vrstic hkrati in jih shrani v zbirko.
V # 4) Zakaj je množično zbiranje v Oracle hitrejše?
Odgovor: Skupinsko zbiranje izboljša zmogljivost z zmanjšanjem interakcije med mehanizmom PL / SQL in bazo podatkov.
V # 5) Kaj je Varray v PL / SQL?
Odgovor: Gre za podatkovno strukturo PL / SQL, ki se uporablja za shranjevanje homogene zbirke elementov istega podatkovnega tipa v zaporedju. Večinoma se uporablja za shranjevanje urejenega nabora podatkov.
V # 6) Ali lahko v Oracle izbrišemo element iz Varray?
Odgovor: S pomočjo stavkov SQL ne moremo neposredno spreminjati ali brisati elementov v spremenljivki. Iz tabele moramo izbrati Varray, ga spremeniti v PL / SQL, nato pa tabelo in shraniti v novo Varray.
V # 7) Kakšna je razlika med ugnezdeno tabelo in spremenljivko?
Odgovor: Razlike so navedene spodaj:
- Varray vzamemo, ko je število elementov znano od prej. Ta omejitev v ugnezdenih tabelah ni mogoča.
- V Varray se elementi uporabljajo zaporedno. Vgnezdena tabela ima tako goste kot redke lastnosti.
- Elementi so vedno razvrščeni v Varray. Elementi so v ugnezdeni tabeli lahko ali ne.
Zaključek
V tej vadnici smo podrobno razpravljali o nekaterih osnovnih konceptih PL / SQL, ki so bistveni za razvijanje znanja o njem.
Obravnavali smo naslednje teme:
- Osnovno razumevanje zbirk PL SQL (metode in izjeme).
- Spremenljivke.
- Vgnezdene tabele
- Tabele po indeksih
<< PREV Tutorial | NASLEDNJA Vadnica >>
Priporočeno branje
- Vrste podatkov matrike - int matrika, dvojna matrika, niz nizov itd.
- Java Array - Kako natisniti elemente polja v Javi?
- PL SQL Vadnica za začetnike s primeri | Kaj je PL / SQL
- Java Array - prijavite, ustvarite in inicializirajte polje v Javi
- Vadnica za dolžino polja Java s primeri kode
- SQL vs NoSQL Natančne razlike in vedeti, kdaj uporabiti NoSQL in SQL
- Razlika med SQL Vs MySQL Vs SQL Server (s primeri)
- JUnit 5 ugnezdeni razred: @Nastavljena vadnica s primeri