Mikä on kokoelma?
Kokoelma on järjestetty ryhmä tietyntyyppisiä elementtejä. Se voi olla kokoelma yksinkertaisia tietotyyppejä tai monimutkaisia tietotyyppejä (kuten käyttäjän määrittelemät tai tietuetyypit).
Kokoelmassa kukin elementti tunnistetaan termillä, jota kutsutaan "alaindeksiksi". Jokaiselle kokoelman kohteelle on määritetty yksilöllinen alaindeksi. Kokoelman tietoja voidaan käsitellä tai hakea viittaamalla kyseiseen ainutlaatuiseen alaindeksiin.
Kokoelmat ovat hyödyllisimpiä asioita, kun suurta samaa tyyppiä olevaa dataa on käsiteltävä tai käsiteltävä. Kokoelmat voidaan täyttää ja käsitellä kokonaisuutena käyttämällä Oracle-sovelluksen 'BULK' -vaihtoehtoa.
Tässä opetusohjelmassa opit-
- Mikä on kokoelma?
- Varrays
- Sisäkkäiset taulukot
- Hakemisto taulukoittain
- Rakentaja- ja alustuskonsepti kokoelmissa
- Keräysmenetelmät
Kokoelmat luokitellaan rakenteen, alaindeksin ja tallennustilan perusteella alla esitetyllä tavalla.
- Hakemisto taulukoittain (tunnetaan myös nimellä Associative Array)
- Sisäkkäiset taulukot
- Varrays
Milloin tahansa kokoelman tietoihin voidaan viitata kolmella termillä Kokoelman nimi, Alaindeksi, Kentän / Sarakkeen nimi nimellä "
Varrays
Varray on keräysmenetelmä, jossa matriisin koko on kiinteä. Taulukon kokoa ei voi ylittää sen kiinteää arvoa. Varrayn alaindeksi on numeerinen. Seuraavassa on Varraysin määritteet.
- Ylärajan koko on kiinteä
- Asutetaan peräkkäin alaindeksillä '1'
- Tämä kokoelmatyyppi on aina tiheä, ts. Emme voi poistaa mitään taulukkoelementtejä. Varray voidaan poistaa kokonaisuutena tai se voidaan leikata loppuun asti.
- Koska se on aina luonteeltaan tiheä, sillä on hyvin vähemmän joustavuutta.
- On tarkoituksenmukaisempaa käyttää, kun taulukon koko on tiedossa, ja suorittaa samanlaisia toimintoja kaikille taulukon elementeille.
- Alaindeksi ja järjestys pysyvät aina vakaina, ts. Kokoelman alaindeksi ja määrä ovat aina samat.
- Ne on alustettava ennen kuin niitä käytetään ohjelmissa. Kaikki alustamattoman kokoelman toiminnot (paitsi OLEMASSA olevat toiminnot) aiheuttavat virheen.
- Se voidaan luoda tietokantaobjektina, joka näkyy koko tietokannassa tai alaohjelman sisällä ja jota voidaan käyttää vain kyseisessä alaohjelmassa.
Seuraava kuva selittää Varrayn (tiheä) muistin allokoinnin kaavamaisesti.
Alaindeksi | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Arvo | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Syntaksi VARRAY: lle:
TYPEIS VARRAY ( ) OF ;
- Edellä olevassa syntaksissa type_name ilmoitetaan tyypin DATA_TYPE VARRAY määritetylle kokorajoitukselle. Tietotyyppi voi olla joko yksinkertainen tai monimutkainen.
Sisäkkäiset taulukot
Sisäkkäinen taulukko on kokoelma, jossa taulukon kokoa ei ole määritetty. Sillä on numeerinen alaindeksityyppi. Alla on lisää kuvauksia sisäkkäisistä taulukotyypeistä.
- Sisäkkäisessä taulukossa ei ole ylärajaa.
- Koska koon ylärajaa ei ole vahvistettu, kokoelmaa, muistia on laajennettava joka kerta ennen kuin sitä käytetään. Voimme laajentaa kokoelmaa käyttämällä EXTEND-avainsanaa.
- Asutetaan peräkkäin alaindeksillä '1'.
- Tämä kokoelmatyyppi voi olla sekä tiheä että harva , eli voimme luoda kokoelman tiheäksi ja voimme myös poistaa yksittäisen taulukkoelementin satunnaisesti, mikä tekee siitä niin harvan.
- Se antaa enemmän joustavuutta taulukkoelementin poistamisessa.
- Se on tallennettu järjestelmän luomaan tietokantataulukkoon, ja sitä voidaan käyttää valintakyselyssä arvojen noutamiseen.
- Alaindeksi ja sekvenssi eivät ole vakaita, ts. Alaindeksi ja taulukkoelementin määrä voivat vaihdella.
- Ne on alustettava ennen kuin niitä käytetään ohjelmissa. Kaikki alustamattoman kokoelman toiminnot (paitsi OLEMASSA olevat toiminnot) aiheuttavat virheen.
- Se voidaan luoda tietokantaobjektina, joka näkyy koko tietokannassa tai alaohjelman sisällä ja jota voidaan käyttää vain kyseisessä alaohjelmassa.
Seuraava kuva selittää sisäkkäisen taulukon (tiheä ja harva) muistin allokoinnin kaavamaisesti. Mustan värinen elementtitila merkitsee kokoelman tyhjää elementtiä eli harvaa.
Alaindeksi | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Arvo (tiheä) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Arvo (harva) | Qwe | Asd | Afg | Asd | Wer |
Sisäkkäin sisäkkäisen taulukon syntaksi:
TYPEIS TABLE OF ;
- Edellä olevassa syntaksissa type_name ilmoitetaan sisäkkäisiksi taulukkokokoelmiksi, joiden tyyppi on DATA_TYPE. Tietotyyppi voi olla joko yksinkertainen tai monimutkainen.
Hakemisto taulukoittain
Hakemisto taulukoittain on kokoelma, jossa taulukon kokoa ei ole määritetty. Toisin kuin muut kokoelmatyypit, käyttäjä voi määrittää alaindeksikohtaisessa kokoelmassa alaindeksin. Seuraavassa luetellaan hakemistokohtaiset attribuutit.
- Alaindeksi voi olla kokonaisluku tai merkkijono. Kokoelman luomisen yhteydessä on mainittava alaindeksityyppi.
- Näitä kokoelmia ei tallenneta peräkkäin.
- Ne ovat luonteeltaan aina harvinaisia.
- Taulukon kokoa ei ole vahvistettu.
- Niitä ei voida tallentaa tietokannan sarakkeeseen. Ne on luotava ja käytettävä missä tahansa ohjelmassa kyseisessä istunnossa.
- Ne antavat enemmän joustavuutta alaindeksin ylläpitämisessä.
- Alaindeksit voivat olla myös negatiivisia alaindeksisekvenssejä.
- Niitä on tarkoituksenmukaisempaa käyttää suhteellisen pienissä kollektiivisissa arvoissa, joissa kokoelma voidaan alustaa ja käyttää samoissa alaohjelmissa.
- Niitä ei tarvitse alustaa ennen kuin aloitat niiden käytön.
- Sitä ei voida luoda tietokantaobjektina. Se voidaan luoda vain alaohjelman sisällä, jota voidaan käyttää vain kyseisessä alaohjelmassa.
- BULK COLLECT -ohjelmaa ei voida käyttää tässä kokoelmatyypissä, koska alaindeksi on annettava erikseen jokaiselle kokoelman tietueelle.
Seuraava kuva selittää sisäkkäisen taulukon (harva) muistin allokoinnin kaavamaisesti. Mustan värinen elementtitila merkitsee kokoelman tyhjää elementtiä eli harvaa.
Alaindeksi (varchar) | ENSIMMÄINEN | TOINEN | KOLMAS | NELJÄS | VIIDES | KUUDES | SEITTÄS |
Arvo (harva) | Qwe | Asd | Afg | Asd | Wer |
Syntaksi hakemistokohtaisesti
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Edellä olevassa syntaksissa type_name ilmoitetaan hakemistokohtaisena kokoelmana, jonka tyyppi on DATA_TYPE. Tietotyyppi voi olla joko yksinkertainen tai monimutkainen. Subsciprt / index-muuttuja annetaan VARCHAR2-tyypinä ja maksimikoko 10.
Rakentaja- ja alustuskonsepti kokoelmissa
Rakentajat ovat sisäänrakennettu toiminto, jonka tarjoaa oraakkeli, jolla on sama nimi kuin objektilla tai kokoelmilla. Ne suoritetaan ensin, kun esine tai kokoelmat lähetetään ensimmäistä kertaa istunnossa. Alla on tärkeitä yksityiskohtia rakentajasta kokoelmakontekstissa:
- Kokoelmia varten nämä rakentajat tulisi kutsua nimenomaisesti alustamaan se.
- Sekä Varray- että Nested-taulukot on alustettava näiden rakentajien kautta, ennen kuin ne ohjataan ohjelmaan.
- Rakentaja laajentaa implisiittisesti muistin allokointia kokoelmalle (paitsi Varray), joten rakentaja voi myös määrittää muuttujat kokoelmille.
- Arvojen osoittaminen kokoelmalle rakentajien kautta ei koskaan tee kokoelmasta harvaa.
Keräysmenetelmät
Oracle tarjoaa monia toimintoja kokoelmien käsittelyyn ja käsittelyyn. Nämä toiminnot ovat erittäin hyödyllisiä ohjelmassa kokoelmien eri määritteiden määrittämiseksi ja muokkaamiseksi. Seuraavassa taulukossa esitetään eri toiminnot ja niiden kuvaus.
Menetelmä | Kuvaus | SYNTAKSI |
OLEMASSA (n) | Tämä menetelmä palauttaa Boolen tulokset. Se palautuu 'TOSI', jos n : nnen elementin olemassa, että kokoelma, muuten se palaa EPÄTOSI. Ainoastaan EXISTS-toimintoja voidaan käyttää alustamattomassa kokoelmassa | |
KREIVI | Antaa kokoelmassa olevien elementtien kokonaismäärän | |
RAJA | Se palauttaa kokoelman enimmäiskoon. Varraylle se palauttaa määritetyn kiinteän koon. Sisäkkäisille taulukoille ja hakemistokohtaisesti se antaa NULL | |
ENSIMMÄINEN | Palauttaa kokoelmien ensimmäisen indeksimuuttujan (alaindeksin) arvon | |
KESTÄÄ | Palauttaa kokoelmien viimeisen hakemistomuuttujan (alaindeksin) arvon | |
ENNEN (n) | Palauttaa indeksimuuttujan ennen n: nnen elementin kokoelmaa . Jos indeksin edeltävää arvoa ei ole, NULL palautetaan | |
SEURAAVA (n) | Tuotto onnistuu indeksi muuttujan kokoelma n : nnen elementin. Jos onnistuneita hakemistoja ei ole, NULL palautetaan | |
LAAJENNA | Laajentaa yhden elementin kokoelmassa lopussa | |
Laajentaa (n) | Laajentaa n elementtiä kokoelman lopussa | |
LAAJENNA (n, i) | Laajentaa n kopiota i : n elementistä kokoelman lopussa | |
TRIMMATA | Poistaa yhden elementin kokoelman päästä | |
TRIM (n) | Poistaa n elementtiä kokoelman lopusta | |
POISTAA | Poistaa kaikki elementit kokoelmasta. Tekee kokoelman tyhjäksi | |
POISTA (n) | Poistaa n: nnen elementin kokoelmasta. Jos n : nnen elementti on tyhjä, niin tämä ei tee mitään | |
POISTA (m, n) | Poistaa elementin alueella m : nnen ja n : nnen kokoelma |
Esimerkki 1: Tietueen tyyppi aliohjelmatasolla
Tässä esimerkissä aiomme nähdä, kuinka kokoelma täytetään 'BULK COLLECT' -toiminnolla ja miten viitataan kokoelmatietoihin.
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;/
Koodin selitys:
- Koodirivi 2-8 : Tietuetyyppi 'emp_det' ilmoitetaan sarakkeilla emp_no, emp_name, palkka ja tietotyypin NUMBER, VARCHAR2, NUMBER, NUMBER ylläpitäjä.
- Koodirivi 9: Tietuetyyppisen elementin 'emp_det' kokoelman 'emp_det_tbl' luominen
- Koodirivi 10: Muuttujan 'guru99_emp_rec' julistaminen 'emp_det_tbl' -tyypiksi ja alustaminen tyhjärakentajalla.
- Koodirivi 12-15: Lisää näytetiedot 'emp' -taulukkoon.
- Koodirivi 16: Lisää tapahtuma.
- Koodirivi 17: Tietueiden haku 'emp' -taulukosta ja kokoelmamuuttujan täyttäminen joukkona käyttämällä komentoa "BULK COLLECT". Muuttuja 'guru99_emp_rec' sisältää nyt kaikki tietueet, jotka ovat taulukossa 'emp'.
- Koodirivi 19-26: 'FOR' -silmukan asettaminen tulostamalla kaikki kokoelman tietueet yksitellen. Keräysmenetelmää FIRST ja LAST käytetään silmukan ala- ja ylärajana.
Tulos : Kuten yllä olevasta kuvakaappauksesta näet, kun yllä oleva koodi suoritetaan, saat seuraavan tuloksen
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----------------------------------------------