Kaj je zbirka?
Zbirka je urejena skupina elementov določenih tipov podatkov. Lahko je zbirka enostavnega podatkovnega tipa ali kompleksnega podatkovnega tipa (na primer uporabniško določeni ali tipi zapisov).
V zbirki je vsak element označen z izrazom, imenovanim "indeks". Vsakemu elementu v zbirki je dodeljen unikatni indeks. Podatke v tej zbirki je mogoče obdelati ali pridobiti s sklicevanjem na ta edinstveni podpis.
Zbirke so najbolj uporabne stvari, kadar je treba obdelati ali manipulirati z velikimi podatki iste vrste. Zbirke lahko naseljujete in z njimi upravljate kot celoto z uporabo možnosti »BULK« v Oracle.
V tej vadnici boste izvedeli-
- Kaj je zbirka?
- Spremenljivke
- Vgnezdene tabele
- Kazalo po tabeli
- Konstruktor in koncept inicializacije v zbirkah
- Metode zbiranja
Zbirke so razvrščene glede na strukturo, podpis in shranjevanje, kot je prikazano spodaj.
- Indeksiranje po tabelah (znano tudi kot Associative Array)
- Vgnezdene tabele
- Spremenljivke
Na podatke v zbirki se lahko kadar koli sklicuje s tremi izrazi Ime zbirke, podpis, ime polja / stolpca kot "
Spremenljivke
Varray je metoda zbiranja, pri kateri je velikost matrike določena. Velikosti polja ni mogoče preseči fiksne vrednosti. Indeks Varray ima številčno vrednost. Sledijo atributi spremenljivk.
- Velikost zgornje meje je določena
- Popolno se začenja s podpisom '1'
- Ta vrsta zbirke je vedno gosta, torej ne moremo izbrisati nobenega elementa matrike. Spremenljivko lahko izbrišete kot celoto ali pa jo obrežete od konca.
- Ker je v naravi vedno gosto, ima zelo manj prilagodljivosti.
- Primerneje je uporabljati, ko je velikost polja znana, in izvajati podobne dejavnosti na vseh elementih matrike.
- Podpis in zaporedje ostaneta vedno stabilna, tj. Podpis in štetje zbirke sta vedno enaka.
- Pred uporabo v programih jih je treba inicializirati. Vsaka operacija (razen operacije EXISTS) na neinicializirani zbirki bo povzročila napako.
- Ustvari se lahko kot objekt baze podatkov, ki je viden v celotni zbirki podatkov ali znotraj podprograma, ki se lahko uporablja samo v tem podprogramu.
Spodnja slika bo shematično razložila dodelitev pomnilnika Varray (gosto).
Podpis | 1. | 2. | 3. | 4. | 5. | 6. | 7. |
Vrednost | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Sintaksa za VARRAY:
TYPEIS VARRAY ( ) OF ;
- V zgornji sintaksi je ime_ime navedeno za VARRAY tipa 'DATA_TYPE' za dano omejitev velikosti. Podatkovni tip je lahko enostaven ali kompleksen.
Vgnezdene tabele
Ugnezdena tabela je zbirka, v kateri velikost matrike ni določena. Ima številčni tip podpisa. Spodaj je več opisov o vrsti ugnezdene tabele.
- Vgnezdena tabela nima zgornje omejitve velikosti.
- Ker zgornja omejitev velikosti ni določena, je treba zbirko pomnilnika vsakič podaljšati, preden jo uporabimo. Zbirko lahko razširimo s ključno besedo 'EXTEND'.
- Popolno se začenja s podpisom '1'.
- Ta vrsta zbirke je lahko tako gosta kot redka , tj. Zbirko lahko ustvarimo kot gosto, posamezne elemente polja pa lahko tudi naključno izbrišemo, zaradi česar je redka.
- Omogoča večjo prilagodljivost pri brisanju elementa polja.
- Shranjena je v sistemsko ustvarjeni tabeli zbirke podatkov in jo lahko uporabimo v poizvedbi za izbiro vrednosti.
- Podpis in zaporedje nista stabilna, tj. Podpis in število elementa polja se lahko spreminjata.
- Pred uporabo v programih jih je treba inicializirati. Vsaka operacija (razen operacije EXISTS) na neinicializirani zbirki bo povzročila napako.
- Ustvari se lahko kot objekt baze podatkov, ki je viden v celotni zbirki podatkov ali znotraj podprograma, ki se lahko uporablja samo v tem podprogramu.
Spodnja slika bo shematično razložila dodelitev pomnilnika ugnezdene tabele (gosto in redko). Črno obarvan prostor elementov označuje prazen element v zbirki, tj. Redek.
Podpis | 1. | 2. | 3. | 4. | 5. | 6. | 7. |
Vrednost (gosto) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Vrednost (redko) | Qwe | Asd | Afg | Asd | Wer |
Sintaksa za ugnezdene tabele:
TYPEIS TABLE OF ;
- V zgornji sintaksi je ime_ime razglašeno kot gnezdena zbirka tabel tipa 'DATA_TYPE'. Podatkovni tip je lahko enostaven ali kompleksen.
Kazalo po tabeli
Indeks po tabeli je zbirka, v kateri velikost matrike ni določena. V nasprotju z drugimi vrstami zbirk lahko v zbirki indeks za tabelo uporabnik definira podpisnik. Sledijo atributi indeksa po tabeli.
- Indeks lahko celo število ali nize. Pri ustvarjanju zbirke je treba omeniti vrsto podpisa.
- Te zbirke niso shranjene zaporedno.
- Vedno so redke narave.
- Velikost polja ni določena.
- Ni jih mogoče shraniti v stolpec baze podatkov. Ustvarijo se in se uporabijo v katerem koli programu na tej seji.
- Omogočajo večjo prilagodljivost pri vzdrževanju podpisa.
- Indeksi so lahko tudi negativnega zaporedja.
- Primerneje jih je uporabiti za razmeroma manjše skupne vrednosti, pri katerih je zbirko mogoče inicializirati in uporabiti v istih podprogramih.
- Pred začetkom uporabe jih ni treba inicializirati.
- Ne more biti ustvarjen kot objekt baze podatkov. Ustvari se lahko samo znotraj podprograma, ki se lahko uporablja samo v tem podprogramu.
- BULK COLLECT ni mogoče uporabiti v tej vrsti zbirke, saj mora biti podpisan izrecno podan za vsak zapis v zbirki.
Spodnja slika bo shematično razložila dodelitev pomnilnika ugnezdene tabele (redke). Črno obarvan prostor elementov označuje prazen element v zbirki, tj. Redek.
Podpis (varchar) | PRVI | DRUGI | TREČE | ČETRTI | PETO | ŠESTO | SEDMA |
Vrednost (redko) | Qwe | Asd | Afg | Asd | Wer |
Sintaksa za kazalo po tabeli
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- V zgornji sintaksi je ime_ime razglašeno kot zbirka po indeksu po tabeli tipa 'DATA_TYPE'. Podatkovni tip je lahko enostaven ali kompleksen. Spremenljivka subsciprt / index je podana kot vrsta VARCHAR2 z največjo velikostjo 10.
Konstruktor in koncept inicializacije v zbirkah
Konstruktorji so vgrajena funkcija, ki jo zagotavlja oracle, ki ima enako ime kot predmet ali zbirke. Izvedejo se najprej, kadar se predmet ali zbirke prvič napotijo na sejo. Spodaj so pomembne podrobnosti konstruktorja v kontekstu zbirke:
- Za zbirke je treba te konstruktorje izrecno poklicati, da jih inicializirajo.
- Tabele Varray in ugnezdene je treba inicializirati s temi konstruktorji, preden se napotijo v program.
- Konstruktor implicitno razširi dodelitev pomnilnika za zbirko (razen Varray), zato lahko konstruktor tudi zbirkam dodeli spremenljivke.
- Če dodelite vrednosti zbirki s pomočjo konstruktorjev, zbirka nikoli ne bo postala redka.
Metode zbiranja
Oracle ponuja veliko funkcij za manipulacijo in delo z zbirkami. Te funkcije so zelo koristne v programu za določanje in spreminjanje različnih atributov zbirk. Naslednja tabela vsebuje različne funkcije in njihov opis.
Metoda | Opis | SINTAKS |
OBSTOJI (n) | Ta metoda bo vrnila logične rezultate. Vrnil bo 'TRUE', če v tej zbirki obstaja n- ti element, sicer pa FALSE. V neinicializiranih zbirkah je mogoče uporabljati samo funkcije EXISTS | |
ŠT | Podaja skupno število elementov, prisotnih v zbirki | |
OMEJITEV | Vrne največjo velikost zbirke. Za Varray bo vrnil določeno fiksno velikost. Za ugnezdene tabele in indekse za tabelo daje NULL | |
PRVI | Vrne vrednost prve indeksne spremenljivke (indeks) zbirk | |
ZADNJE | Vrne vrednost zadnje indeksne spremenljivke (indeks) zbirk | |
PREDHODNO (n) | Vrne pred spremenljivko indeksa v zbirki n- tega elementa. Če ni indeksa pred indeksom, se vrne NULL | |
NASLEDNJA (n) | Vrne spremenljivko indeksa uspe v zbirki n- tega elementa. Če ni uspelo, se vrne vrednost indeksa NULL | |
PODALJŠAJ | Na koncu razširi en element v zbirki | |
EXTEND (n) | Razširi n elementov na koncu zbirke | |
EXTEND (n, i) | Razširi n kopij i- tega elementa na koncu zbirke | |
TRIM | Odstrani en element s konca zbirke | |
TRIM (n) | Odstrani n elementov s konca zbirke | |
IZBRIŠI | Izbriše vse elemente iz zbirke. Naredi zbirko prazno | |
IZBRIŠI (n) | Izbriše n-ti element iz zbirke. Če je n- ti element NULL, potem to ne bo nič | |
IZBRIŠI (m, n) | Izbriše element v območje m th , da je n th pri zbiranju |
Primer1: vrsta zapisa na ravni podprograma
V tem primeru bomo videli, kako izpolniti zbirko z uporabo »BULK COLLECT« in kako napotiti podatke o zbirki.
DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);TYPE emp_det_tbl IS TABLE OF emp_det; guru99_emp_rec emp_det_tbl:= emp_det_tbl();BEGININSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1000,’AAA’,25000,1000);INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1001,'XXX’,10000,1000);INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);INSERT INTO emp (emp_no,emp_name,salary, manager) VALUES (1003,’ZZZ’,'7500,1000);COMMIT:SELECT emp no,emp_name,manager,salary BULK COLLECT INTO guru99_emp_recFROM emp;dbms_output.put_line (‘Employee Detail');FOR i IN guru99_emp_rec.FIRST… guru99_emp_rec.LASTLOOPdbms_output.put_line (‘Employee Number: '||guru99_emp_rec(i).emp_no);dbms_output.put_line (‘Employee Name: '||guru99_emp_rec(i).emp_name);dbms_output.put_line (‘Employee Salary:'|| guru99_emp_rec(i).salary);dbms_output.put_line(‘Employee Manager Number:'||guru99_emp_rec(i).manager);dbms_output.put_line('--------------------------------');END LOOP;END;/
Razlaga kode:
- Vrstica kode 2-8 : Tip zapisa 'emp_det' je prijavljen s stolpci emp_no, emp_name, plača in upravitelj podatkovnih tipov ŠTEVILO, VARČAR2, ŠTEVILO, ŠTEVILO.
- Vrstica kode 9: Ustvarjanje zbirke 'emp_det_tbl' elementa vrste zapisa 'emp_det'
- Vrstica kode 10: Spremenljivka 'guru99_emp_rec' je razglašena za tip 'emp_det_tbl' in inicializirana z ničelnim konstruktorjem.
- Vrstica kode 12-15: Vstavljanje vzorčnih podatkov v tabelo 'emp'.
- Vrstica kode 16: Predaja transakcije vstavljanja.
- Vrstica kode 17: Pridobivanje zapisov iz tabele 'emp' in množična spremenljivka zbirke z ukazom "BULK COLLECT". Zdaj spremenljivka 'guru99_emp_rec' vsebuje vse zapise, ki so prisotni v tabeli 'emp'.
- Vrstica kode 19-26: Nastavitev zanke 'FOR' za tiskanje vseh zapisov v zbirki enega za drugim. Metoda zbiranja FIRST in LAST se uporablja kot spodnja in zgornja meja zanke.
Izhod : Kot lahko vidite na zgornjem posnetku zaslona, ko se zgornja koda izvede, boste dobili naslednji izhod
Employee DetailEmployee Number: 1000Employee Name: AAAEmployee Salary: 25000Employee Manager Number: 1000----------------------------------------------Employee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000----------------------------------------------Employee Number: 1002Employee Name: YYYEmployee Salary: 15000Employee Manager Number: 1000----------------------------------------------Employee Number: 1003Employee Name: ZZZEmployee Salary: 7500Employee Manager Number: 1000----------------------------------------------