Mis on kollektsioon?
Kogumik on teatud andmetüüpide elementide järjestatud rühm. See võib olla lihtsa andmetüübi või keeruka andmetüübi kogum (näiteks kasutaja määratletud või kirjetüübid).
Kogus identifitseeritakse iga element terminiga, mida nimetatakse "alaindeksiks". Igale kollektsiooni üksusele määratakse ainulaadne alaindeks. Selle kogu andmeid saab manipuleerida või tuua, viidates sellele ainulaadsele alaindeksile.
Kogud on kõige kasulikumad asjad, kui on vaja töödelda või töödelda suuri sama tüüpi andmeid. Kogusid saab asustada ja tervikuna käsitseda, kasutades Oracle'i valikut „BULK”.
Selles õpetuses saate teada
- Mis on kollektsioon?
- Varrays
- Pesastatud tabelid
- Indeks tabelite kaupa
- Konstruktori ja initsialiseerimise kontseptsioon kogudes
- Kogumismeetodid
Kogud klassifitseeritakse struktuuri, alaindeksi ja salvestusruumi järgi, nagu allpool näidatud.
- Indeks tabelite kaupa (tuntud ka kui assotsiatiivne massiiv)
- Pesastatud tabelid
- Varrays
Igal ajal võib kollektsiooni andmetele viidata kolme terminiga. Kollektsiooni nimi, alaindeks, välja / veeru nimi on "
Varrays
Varray on kogumismeetod, milles massiivi suurus on fikseeritud. Massiivi suurust ei saa ületada selle fikseeritud väärtusest. Varray alaindeks on arvulise väärtusega. Järgnevad Varrays atribuudid.
- Ülemine piir on fikseeritud
- Asustatud järjestikku alustades alaindeksiga „1”
- See kollektsiooni tüüp on alati tihe, st me ei saa massiivi elemente kustutada. Varray saab kustutada tervikuna või kärpida lõpust.
- Kuna see on alati oma olemuselt tihe, on sellel paindlikkus väga väike.
- Seda on sobivam kasutada, kui massiivi suurus on teada, ja teha sarnaseid toiminguid kõigi massiivi elementidega.
- Alaindeks ja järjestus jäävad alati stabiilseks, st kogu alaindeks ja arv on alati ühesugused.
- Enne programmides kasutamist tuleb need lähtestada. Mis tahes initsialiseerimata kogu toiming (v.a OLEMINE) põhjustab vea.
- Seda saab luua andmebaasiobjektina, mis on nähtav kogu andmebaasis või alamprogrammis, mida saab kasutada ainult selles alamprogrammis.
Allpool olev joonis selgitab Varray (tihe) mälu jaotust skemaatiliselt.
Alaindeks | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Väärtus | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
VARRAY süntaks:
TYPEIS VARRAY ( ) OF ;
- Ülaltoodud süntaksis on tüüp_nimi deklareeritud antud suuruse piirangu jaoks tüübiga „DATA_TYPE” VARRAY. Andmetüüp võib olla nii lihtne kui ka keerukas.
Pesastatud tabelid
Pesastatud tabel on kogu, milles massiivi suurus pole fikseeritud. Sellel on numbriline alaindeksi tüüp. Allpool on rohkem kirjeldusi pesastatud tabelitüübi kohta.
- Pesastatud tabelil ei ole suuruse ülempiiri.
- Kuna suuruse ülempiir pole fikseeritud, tuleb kogu kasutamist, enne kui seda kasutame, kogu mälu pikendada. Saame kollektsiooni laiendada, kasutades märksõna „LAIENDA“.
- Asustatud järjestikku alustades alaindeksiga „1”.
- See kollektsioonitüüp võib olla nii tihe kui ka hõre , st saame kollektsiooni luua tihedana ja võime ka üksiku massiivi elemendi juhuslikult kustutada, mis muudab selle nii hõredaks.
- See annab massiivi elemendi kustutamisel suurema paindlikkuse.
- See on salvestatud süsteemi loodud andmebaasi tabelisse ja seda saab väärtuste toomiseks kasutada valitud päringus.
- Alaindeks ja järjestus pole stabiilsed, st alaindeks ja massiivi elemendi arv võivad varieeruda.
- Enne programmides kasutamist tuleb need lähtestada. Mis tahes initsialiseerimata kogu toiming (v.a OLEMINE) põhjustab vea.
- Seda saab luua andmebaasiobjektina, mis on nähtav kogu andmebaasis või alamprogrammis, mida saab kasutada ainult selles alamprogrammis.
Allpool olev joonis selgitab pesastatud tabeli (tihe ja hõre) mälu jaotust skemaatiliselt. Musta värvi elemendiruum tähistab kogu tühja elementi, st hõredat.
Alaindeks | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Väärtus (tihe) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Väärtus (hõre) | Qwe | Asd | Afg | Asd | Wer |
Pesastatud tabeli süntaks:
TYPEIS TABLE OF ;
- Ülaltoodud süntaksis on type_name deklareeritud tüübi 'DATA_TYPE' pesastatud tabelikoguna. Andmetüüp võib olla nii lihtne kui ka keerukas.
Indeks tabelite kaupa
Indeks tabelite kaupa on kogu, milles massiivi suurus pole fikseeritud. Erinevalt teistest kollektsioonitüüpidest võib indeks-tabelite kogumis kasutaja määratleda alaindeksi. Järgnevalt on toodud tabeli kaupa atribuudid.
- Alaindeks võib olla täisarv või string. Kollektsiooni loomise ajal tuleks mainida alaindeksi tüüpi.
- Neid kogusid ei salvestata järjestikku.
- Nad on oma olemuselt alati hõredad.
- Massiivi suurus pole fikseeritud.
- Neid ei saa andmebaasi veergu salvestada. Need luuakse ja kasutatakse selle konkreetse seansi mis tahes programmis.
- Need pakuvad alaindeksi säilitamisel suuremat paindlikkust.
- Tellimused võivad olla ka negatiivse alaindeksi järjestusega.
- Neid on sobivam kasutada suhteliselt väiksemate kollektiivsete väärtuste puhul, milles kollektsiooni saab initsialiseerida ja kasutada samades alamprogrammides.
- Neid ei pea enne nende kasutamist alustama.
- Seda ei saa andmebaasi objektina luua. Seda saab luua ainult alamprogrammi sees, mida saab kasutada ainult selles alamprogrammis.
- BULK COLLECTi ei saa selles kollektsiooni tüübis kasutada, kuna alaindeks tuleks selgesõnaliselt anda kogu kogu kirje kohta.
Allpool olev joonis selgitab pesastatud tabeli (hõre) mälu jaotust skemaatiliselt. Musta värvi elemendiruum tähistab kogu tühja elementi, st hõredat.
Alaindeks (varchar) | ESIMENE | TEINE | KOLMAS | NELJAS | VIIES | KUUES | Seitsmes |
Väärtus (hõre) | Qwe | Asd | Afg | Asd | Wer |
Süntaksi indeksite kaupa tabelite kaupa
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Ülaltoodud süntaksis on type_name deklareeritud tüübi „DATA_TYPE” indeks-tabelite kaupa. Andmetüüp võib olla nii lihtne kui ka keerukas. Muutuja subsciprt / index antakse VARCHAR2 tüübina, maksimaalne suurus on 10.
Konstruktori ja initsialiseerimise kontseptsioon kogudes
Konstruktorid on sisseehitatud funktsioon, mida pakub oraakel, millel on sama nimi kui objektil või kogudel. Need käivitatakse kõigepealt iga kord, kui objektile või kogudele seansil esimest korda viidatakse. Allpool on konstruktori olulised üksikasjad kogumise kontekstis:
- Kollektsioonide jaoks tuleks neid konstruktoreid selle initsialiseerimiseks selgesõnaliselt kutsuda.
- Enne programmisse viimist tuleb nende konstruktorite kaudu lähtestada nii Varray kui ka Nested tabelid.
- Konstruktor laiendab implitsiitselt kogu mälu jaotust (v.a Varray), seega saab konstruktor muutujaid ka kogudele omistada.
- Konstruktorite kaudu kollektsioonile väärtuste määramine ei muuda kogu kunagi hõredaks.
Kogumismeetodid
Oracle pakub palju funktsioone kollektsioonidega manipuleerimiseks ja nendega töötamiseks. Need funktsioonid on programmis väga kasulikud kogude erineva atribuudi määramiseks ja muutmiseks. Järgmises tabelis on toodud erinevad funktsioonid ja nende kirjeldus.
Meetod | Kirjeldus | SÜNTAKS |
OLEMAS (n) | See meetod tagastab Boole'i tulemused. Kui kollektsioonis on n- nda elemendi väärtus, tagastatakse see väärtus TRUE , vastasel juhul tagastatakse väärtus FALSE. Initsialiseerimata kogudes saab kasutada ainult funktsioone OLEMAS | |
COUNT | Annab kogu kollektsioonis olevate elementide koguarvu | |
LIMIT | See tagastab kogu maksimaalse suuruse. Varray jaoks tagastab see kindlaksmääratud kindla suuruse. Nested tabelite ja indeksite kaupa tabelite korral annab see NULL | |
ESIMENE | Tagastab kogude esimese indeksmuutuja (alaindeksi) väärtuse | |
VIIMANE | Tagastab kogude viimase indeksmuutuja (alaindeksi) väärtuse | |
ENNE (n) | Tagastab enne n- nda elemendi kogu indeksmuutujat . Kui indeksile eelnevat väärtust ei ole, tagastatakse NULL | |
JÄRGMINE (n) | Tagastab n- nda elemendi kogu indeksmuutuja . Kui pole õnnestunud indeksi väärtust, tagastatakse NULL | |
LAIENDA | Laiendab kogu kollektsiooni ühte elementi lõpus | |
EXTEND (n) | Laiendab kollektsiooni lõpus n elementi | |
EXTEND (n, i) | Sirutub n koopiad i nda elemendi lõpus kogumist | |
TRIM | Eemaldab kollektsiooni lõpust ühe elemendi | |
TRIM (n) | Eemaldab kogumise lõpust n elementi | |
KUSTUTA | Kustutab kogu elemendi kogu. Teeb kogu tühjaks | |
KUSTUTA (n) | Kustutab kogust n-nda elemendi. Kui n- nda elemendi väärtus on NULL, ei tee see midagi | |
KUSTUTA (m, n) | Kustutab element vahemikus m nda n th kogumises |
Näide1: Kirje tüüp alamprogrammi tasemel
Selles näites vaatame, kuidas kollektsiooni asustada 'BULK COLLECT' abil ja kuidas kollektsiooni andmeid suunata.
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;/
Koodi selgitus:
- Koodirida 2–8 : Dokumendi tüüp „emp_det” deklareeritakse veergudega emp_no, emp_name, palk ja andmetüübi NUMBER, VARCHAR2, NUMBER, NUMBER haldur.
- Koodirida 9: kirjetüübi elemendi 'emp_det' kogu 'emp_det_tbl' loomine
- Koodirida 10: Muutuja 'guru99_emp_rec' deklareerimine tüübiks 'emp_det_tbl' ja initsialiseerimine nullkonstruktoriga.
- Koodirida 12-15: näidisandmete sisestamine tabelisse 'emp'.
- Koodirida 16: sisestustehingu sooritamine.
- Koodirida 17: kirjete toomine tabelist 'emp' ja kollektsiooni muutuja täitmine hulgina käsuga "BULK COLLECT". Nüüd sisaldab muutuja 'guru99_emp_rec' kõiki kirjeid, mis on tabelis 'emp'.
- Koodirida 19–26: „FOR” -silmu seadmine kõigi kollektsiooni kirjete ükshaaval printimiseks. Kogumismeetodit FIRST ja LAST kasutatakse silmuse alumise ja kõrgema piirina.
Väljund : nagu näete ülaltoodud ekraanipildil, kui ülaltoodud kood on täidetud, saate järgmise väljundi
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----------------------------------------------