Što je kolekcija?
Zbirka je uređena skupina elemenata pojedinih tipova podataka. To može biti zbirka jednostavnih vrsta podataka ili složenih vrsta podataka (poput korisnički definiranih ili vrsta zapisa).
U zbirci je svaki element prepoznat pojmom koji se naziva "indeks". Svakoj stavci u zbirci dodijeljen je jedinstveni indeks. Podaci s te zbirke mogu se manipulirati ili dohvatiti pozivanjem na taj jedinstveni indeks.
Zbirke su najkorisnije stvari kada treba obrađivati ili manipulirati velikim podacima istog tipa. Kolekcije se mogu popunjavati i njima se manipulira kao cjelinom pomoću opcije 'BULK' u Oracleu.
U ovom vodiču naučit ćete-
- Što je kolekcija?
- Varijable
- Ugniježđene tablice
- Indeks po tablici
- Konstruktor i koncept inicijalizacije u zbirkama
- Metode prikupljanja
Zbirke su klasificirane na temelju strukture, indeksa i pohrane kako je prikazano u nastavku.
- Indeks po tablicama (poznat i kao Asocijativni niz)
- Ugniježđene tablice
- Varijable
U bilo kojem trenutku, podaci u zbirci mogu se uputiti pomoću tri pojma Naziv zbirke, indeks, naziv polja / stupca kao "
Varijable
Varray je metoda prikupljanja u kojoj je veličina niza fiksna. Veličina polja ne može se premašiti od fiksne vrijednosti. Indeks Varray ima numeričku vrijednost. Slijede atributi Varrays.
- Veličina gornje granice je fiksna
- Naseljava se sekvencijalno počevši od indeksa '1'
- Ova je vrsta zbirke uvijek gusta, tj. Ne možemo izbrisati nijedan element niza. Polje se može izbrisati u cjelini ili se može obrezati s kraja.
- Budući da je uvijek guste prirode, ima vrlo malu fleksibilnost.
- Prikladnije je koristiti kad je poznata veličina polja i izvoditi slične aktivnosti na svim elementima niza.
- Indeks i slijed uvijek ostaju stabilni, tj. Indeks i broj zbirke uvijek su isti.
- Prije upotrebe u programima potrebno ih je inicijalizirati. Svaka operacija (osim operacije POSTOJI) na neinicijaliziranoj zbirci izbacit će pogrešku.
- Može se stvoriti kao objekt baze podataka, koji je vidljiv u cijeloj bazi podataka ili unutar potprograma, koji se može koristiti samo u tom potprogramu.
Sljedeća slika će shematski objasniti dodjelu Varray-a (guste) memorije.
Pretplata | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vrijednost | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Sintaksa za VARRAY:
TYPEIS VARRAY ( ) OF ;
- U gornjoj sintaksi, ime_tipa deklarirano je kao VARRAY tipa 'DATA_TYPE' za dano ograničenje veličine. Tip podataka može biti jednostavan ili složen tip.
Ugniježđene tablice
Ugnježđena tablica je zbirka u kojoj veličina polja nije fiksna. Ima numerički tip indeksa. Ispod je još opisa o ugniježđenoj vrsti tablice.
- Ugnježđena tablica nema gornju granicu veličine.
- Budući da gornja granica veličine nije fiksna, zbirku, memoriju treba svaki put produžiti prije nego što je upotrijebimo. Zbirku možemo proširiti pomoću ključne riječi 'EXTEND'.
- Naseljava se sekvencijalno počevši od indeksa '1'.
- Ova vrsta zbirke može biti i gusta i rijetka , tj. Možemo stvoriti kolekciju kao gustu, a možemo i nasumično izbrisati pojedinačni element niza, što ga čini rijetkim.
- Daje veću fleksibilnost u pogledu brisanja elementa niza.
- Pohranjena je u tablici baze podataka generiranoj sustavom i može se koristiti u odabranom upitu za dohvaćanje vrijednosti.
- Indeks i slijed nisu stabilni, tj. Indeks i broj elementa polja mogu se razlikovati.
- Prije upotrebe u programima potrebno ih je inicijalizirati. Svaka operacija (osim operacije POSTOJI) na neinicijaliziranoj zbirci izbacit će pogrešku.
- Može se stvoriti kao objekt baze podataka, koji je vidljiv u cijeloj bazi podataka ili unutar potprograma, koji se može koristiti samo u tom potprogramu.
Sljedeća slika će shematski objasniti dodjelu memorije ugniježđene tablice (guste i rijetke). Prostor elemenata u crnoj boji označava prazan element u zbirci, tj. Rijedak.
Pretplata | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vrijednost (gusta) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Vrijednost (rijetko) | Qwe | Asd | Afg | Asd | Wer |
Sintaksa za ugniježđenu tablicu:
TYPEIS TABLE OF ;
- U gornjoj sintaksi, type_name je deklariran kao ugniježđena zbirka tablice tipa 'DATA_TYPE'. Tip podataka može biti jednostavan ili složen tip.
Indeks po tablici
Index-by-table je zbirka u kojoj veličina polja nije fiksna. Za razliku od ostalih vrsta kolekcije, u zbirci indeksa po tablici indeks može sadržavati korisnik. Slijede atributi indeksa po tablici.
- Indeks može biti cijelog broja ili niza. U vrijeme stvaranja zbirke treba spomenuti tip indeksa.
- Te se zbirke ne pohranjuju uzastopno.
- Uvijek su rijetke prirode.
- Veličina polja nije fiksna.
- Ne mogu se pohraniti u stupac baze podataka. Oni će se stvoriti i koristiti u bilo kojem programu u toj određenoj sesiji.
- Daju veću fleksibilnost u pogledu održavanja indeksa.
- Indeksi također mogu biti negativnog niza indeksa.
- Prikladnije ih je koristiti za relativno manje zbirne vrijednosti u kojima se zbirka može inicijalizirati i koristiti u okviru istih potprograma.
- Ne trebaju biti inicijalizirane prije nego što ih započnete koristiti.
- Ne može se stvoriti kao objekt baze podataka. Može se stvoriti samo unutar potprograma, koji se može koristiti samo u tom potprogramu.
- BULK COLLECT se ne može koristiti u ovoj vrsti zbirke jer bi se indeks trebao dati izričito za svaki zapis u zbirci.
Sljedeća slika će shematski objasniti dodjelu memorije ugniježđene tablice (rijetke). Prostor elemenata u crnoj boji označava prazan element u zbirci, tj. Rijedak.
Pretplata (varchar) | PRVI | DRUGI | TREĆI | ČETVRTI | PETI | ŠESTI | SEDMI |
Vrijednost (rijetko) | Qwe | Asd | Afg | Asd | Wer |
Sintaksa za indeks po tablici
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- U gornjoj sintaksi, type_name je deklariran kao zbirka indeksa po tablici tipa 'DATA_TYPE'. Tip podataka može biti jednostavan ili složen tip. Varijabla subsciprt / index daje se kao tip VARCHAR2 s maksimalnom veličinom kao 10.
Konstruktor i koncept inicijalizacije u zbirkama
Konstruktori su ugrađena funkcija koju pruža oracle koja ima isto ime kao objekt ili zbirke. Prvo se izvršavaju kad god se objekt ili kolekcije upućuju prvi put u sesiji. Ispod su važni detalji konstruktora u kontekstu zbirke:
- Za zbirke bi se ovi konstruktori trebali eksplicitno pozvati da ih inicijaliziraju.
- I tablice Varray i ugniježđene potrebno je inicijalizirati putem ovih konstruktora prije upućivanja u program.
- Konstruktor implicitno proširuje dodjelu memorije za kolekciju (osim Varray-a), stoga konstruktor također može dodijeliti varijable kolekcijama.
- Dodjeljivanje vrijednosti kolekciji putem konstruktora nikada neće učiniti zbirku oskudnom.
Metode prikupljanja
Oracle nudi mnoge funkcije za manipulaciju i rad sa zbirkama. Te su funkcije vrlo korisne u programu za određivanje i modificiranje različitih atributa zbirki. Sljedeća tablica dati će različite funkcije i njihov opis.
Metoda | Opis | SINTAKSA |
POSTOJI (n) | Ova metoda vratit će logičke rezultate. Vratit će 'TRUE' ako n- ti element postoji u toj zbirci, u suprotnom će vratiti FALSE. U neinicijaliziranim zbirkama mogu se koristiti samo funkcije POSTOJI | |
RAČUNATI | Daje ukupan broj elemenata prisutnih u zbirci | |
OGRANIČITI | Vraća maksimalnu veličinu zbirke. Za Varray će vratiti fiksnu veličinu koja je definirana. Za ugniježđenu tablicu i indeks po tablici daje NULL | |
PRVI | Vraća vrijednost prve indeksne varijable (indeks) zbirki | |
POSLJEDNJI | Vraća vrijednost posljednje indeksne varijable (indeks) zbirki | |
PRIJE (n) | Vraća prethodi indeksnoj varijabli u zbirci n- tog elementa. Ako nema prethodne vrijednosti indeksa, vraća se NULL | |
DALJE (n) | Vraća uspješnu indeksnu varijablu u zbirci n- tog elementa. Ako nema uspjeha, vraća se vrijednost indeksa NULL | |
PRODUŽI | Na kraju proširuje jedan element u zbirci | |
PRODUŽI (n) | Proširuje n elemenata na kraju zbirke | |
PRODUŽI (n, i) | Proširuje n kopija i. Elementa na kraju zbirke | |
TRIM | Uklanja jedan element s kraja zbirke | |
TRIM (n) | Uklanja n elemenata s kraja zbirke | |
IZBRISATI | Briše sve elemente iz zbirke. Čini zbirku praznom | |
IZBRIŠI (n) | Briše n-ti element iz zbirke. Ako je n- ti element NULL, to neće učiniti ništa | |
IZBRIŠI (m, n) | Briše element u rasponu od m- tog do n- tog u zbirci |
Primjer1: Vrsta zapisa na razini potprograma
U ovom ćemo primjeru vidjeti kako popuniti zbirku pomoću 'BULK COLLECT' i kako uputiti podatke o zbirci.
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;/
Objašnjenje koda:
- Redak koda 2-8 : Vrsta zapisa 'emp_det' deklarira se sa stupcima emp_no, emp_name, plaća i upravitelj podataka tipa BROJ, VARCHAR2, BROJ, BROJ.
- Redak koda 9: Stvaranje zbirke 'emp_det_tbl' elementa tipa zapisa 'emp_det'
- Redak koda 10: Deklariranje varijable 'guru99_emp_rec' kao tipa 'emp_det_tbl' i inicijalizacija null konstruktorom.
- Redak koda 12-15: Umetanje uzoraka podataka u tablicu 'emp'.
- Redak koda 16: Predavanje umetanja transakcije.
- Redak koda 17: Dohvaćanje zapisa iz tablice 'emp' i skupno popunjavanje varijable zbirke pomoću naredbe "BULK COLLECT". Sada varijabla 'guru99_emp_rec' sadrži sve zapise koji su prisutni u tablici 'emp'.
- Redak koda 19-26: Postavljanje petlje 'FOR' pomoću pojedinačnog ispisa svih zapisa u zbirci. Metoda prikupljanja PRVI i POSLJEDNJI koristi se kao donja i viša granica petlje.
Izlaz : Kao što možete vidjeti na gornjoj snimci zaslona, kada se izvrši gornji kod, dobit ćete sljedeći izlaz
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----------------------------------------------