Kas yra kolekcija?
Kolekcija yra sutvarkyta tam tikrų duomenų tipų elementų grupė. Tai gali būti paprasto duomenų tipo arba sudėtingo duomenų tipo rinkinys (pvz., Vartotojo apibrėžti ar įrašų tipai).
Kolekcijoje kiekvienas elementas identifikuojamas terminu, vadinamu „subscript“. Kiekvienam kolekcijos elementui priskiriamas unikalus indeksas. Toje kolekcijoje esančiais duomenimis galima manipuliuoti arba juos gauti, nurodant tą unikalų indeksą.
Kolekcijos yra naudingiausi dalykai, kai reikia apdoroti ar tvarkyti didelius to paties tipo duomenis. Kolekcijas galima užpildyti ir jomis naudotis kaip vientisomis, naudojant „Oracle“ parinktį „BULK“.
Šioje pamokoje sužinosite
- Kas yra kolekcija?
- Varrays
- Lizdinės lentelės
- Po indeksą
- Konstruktoriaus ir inicializavimo koncepcija kolekcijose
- Surinkimo metodai
Kolekcijos klasifikuojamos pagal struktūrą, indeksą ir saugyklą, kaip parodyta žemiau.
- Po indeksus (taip pat žinomas kaip asociatyvusis masyvas)
- Lizdinės lentelės
- Varrays
Bet kuriuo metu kolekcijos duomenys gali būti vadinami trimis terminais Kolekcijos pavadinimas, Subkriptas, Lauko / Stulpelio pavadinimas kaip "
Varrays
„Varray“ yra rinkimo metodas, kai fiksuojamas masyvo dydis. Masyvo dydis negali būti didesnis nei jo fiksuota vertė. „Varray“ indeksas yra skaitinės vertės. Toliau pateikiami „Varrays“ atributai.
- Viršutinės ribos dydis yra fiksuotas
- Gyvenama nuosekliai pradedant indeksu „1“
- Šis rinkinio tipas visada yra tankus, ty negalime ištrinti jokių masyvo elementų. „Varray“ galima ištrinti kaip visumą arba apipjaustyti nuo galo.
- Kadangi jis visada yra tankus, jis turi labai mažai lankstumo.
- Tikslingiau naudoti, kai žinomas masyvo dydis, ir atlikti panašius veiksmus su visais masyvo elementais.
- Indeksas ir seka visada išlieka stabilūs, ty rinkinio indeksas ir skaičius visada yra vienodi.
- Jie turi būti inicializuoti prieš naudojant juos programose. Bet kokia neinicijuoto rinkinio operacija (išskyrus „EKSISTUOJAMOS operacijos“) sukels klaidą.
- Jis gali būti sukurtas kaip duomenų bazės objektas, matomas visoje duomenų bazėje arba paprogramės viduje, kuris gali būti naudojamas tik toje paprogramėje.
Žemiau pateiktas paveikslėlis paaiškins Varray (tankus) atminties paskirstymą schematiškai.
Abonementas | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vertė | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
VARRAY sintaksė:
TYPEIS VARRAY ( ) OF ;
- Pirmiau pateiktoje sintaksėje tipo_pavadinimas nurodomas kaip „DATA_TYPE“ tipo VARRAY nurodytam dydžio apribojimui. Duomenų tipas gali būti paprastas arba sudėtingas.
Lizdinės lentelės
Įdėta lentelė yra rinkinys, kuriame masyvo dydis nėra nustatytas. Jis turi skaitmeninį indekso tipą. Žemiau yra daugiau aprašų apie įdėtą lentelės tipą.
- „Nested“ lentelėje nėra viršutinio dydžio apribojimo.
- Kadangi viršutinė dydžio riba nėra nustatyta, rinkinį, atmintį reikia kiekvieną kartą išplėsti, kol mes ją naudosime. Kolekciją galime išplėsti naudodami „EXTEND“ raktinį žodį.
- Gyvenama nuosekliai pradedant indeksu „1“.
- Šis rinkinio tipas gali būti ir tankus, ir retas , ty mes galime sukurti kolekciją kaip tankią, taip pat galime atsitiktinai ištrinti atskirą masyvo elementą, todėl jis tampa toks retas.
- Tai suteikia daugiau lankstumo ištrinant masyvo elementą.
- Jis saugomas sistemos sugeneruotoje duomenų bazės lentelėje ir gali būti naudojamas pasirinktoje užklausoje norint gauti reikšmes.
- Indeksas ir seka nėra stabilūs, ty indeksas ir masyvo elemento skaičius gali skirtis.
- Jie turi būti inicializuoti prieš naudojant juos programose. Bet kokia neinicijuoto rinkinio operacija (išskyrus „EKSISTUOJAMOS operacijos“) sukels klaidą.
- Jis gali būti sukurtas kaip duomenų bazės objektas, matomas visoje duomenų bazėje arba paprogramės viduje, kuris gali būti naudojamas tik toje paprogramėje.
Žemiau pateiktas paveikslėlis paaiškins įdėtos lentelės (tankios ir retos) atminties paskirstymą schematiškai. Juodos spalvos elemento tarpas žymi tuščią kolekcijos elementą, ty retą.
Abonementas | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vertė (tanki) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Vertė (negausi) | Qwe | Asd | Afg | Asd | Wer |
Įterptosios lentelės sintaksė:
TYPEIS TABLE OF ;
- Pirmiau pateiktoje sintaksėje type_name deklaruojamas kaip „DATA_TYPE“ tipo įdėtųjų lentelių rinkinys. Duomenų tipas gali būti paprastas arba sudėtingas.
Po indeksą
Rodyklė po lentelės yra rinkinys, kuriame masyvo dydis nėra fiksuotas. Skirtingai nuo kitų rinkinių tipų, indeksų lentelių rinkinyje indeksą gali apibrėžti vartotojas. Toliau pateikiami kiekvieno indekso atributai.
- Indekso gali būti sveikas skaičius arba eilutės. Kuriant kolekciją, reikia paminėti prenumeratos tipą.
- Šios kolekcijos nėra saugomos nuosekliai.
- Jie visada yra reto pobūdžio.
- Masyvo dydis nėra fiksuotas.
- Jų negalima saugoti duomenų bazės stulpelyje. Jie turi būti sukurti ir naudojami bet kurioje konkrečios sesijos programoje.
- Jie suteikia daugiau lankstumo išlaikant indeksą.
- Abonementai taip pat gali būti neigiami.
- Jas tikslingiau naudoti palyginti mažesnėms kolektyvinėms vertėms, kuriose kolekciją galima inicijuoti ir naudoti tose pačiose paprogramėse.
- Prieš pradedant juos naudoti, jų nereikia inicializuoti.
- Jo negalima sukurti kaip duomenų bazės objekto. Jį galima sukurti tik paprogramės viduje, kuri gali būti naudojama tik toje paprogramėje.
- „BULK COLLECT“ negalima naudoti šio tipo kolekcijose, nes kiekvienam rinkinio įrašui turėtų būti aiškiai nurodytas indeksas.
Žemiau pateiktas paveikslėlis paaiškins „Nested Table“ (negausios) atminties paskirstymą schematiškai. Juodos spalvos elemento tarpas žymi tuščią kolekcijos elementą, ty retą.
Prenumerata (varchar) | PIRMAS | ANTRA | TREČIAS | KETVIRTA | PENKTAS | ŠEŠTAS | SEPTINTASIS |
Vertė (negausi) | Qwe | Asd | Afg | Asd | Wer |
Po indekso sintaksė
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Pirmiau pateiktoje sintaksėje type_name yra deklaruojamas kaip „DATA_TYPE“ tipo indeksų rinkinys. Duomenų tipas gali būti paprastas arba sudėtingas. Subciprt / index kintamasis pateikiamas kaip VARCHAR2 tipas, o didžiausias dydis yra 10.
Konstruktoriaus ir inicializavimo koncepcija kolekcijose
Konstruktoriai yra integruota funkcija, kurią teikia orakulas, kuris turi tą patį pavadinimą kaip objektas ar kolekcijos. Jie vykdomi pirmiausia, kai objektas ar kolekcijos pirmą kartą persiunčiamos sesijos metu. Toliau pateikiamos svarbios konstruktoriaus detalės kolekcijos kontekste:
- Kolekcijoms reikia inicializuoti šiuos konstruktorius.
- Tiek „Varray“, tiek „Nested“ lenteles reikia inicijuoti per šiuos konstruktorius, prieš pradedant jas nukreipti į programą.
- Konstruktorius netiesiogiai išplečia atminties paskirstymą kolekcijai (išskyrus Varray), taigi konstruktorius taip pat gali priskirti kintamuosius kolekcijoms.
- Priskyrę kolekcijai vertybes per konstruktorius, kolekcija niekada nebus reta.
Surinkimo metodai
„Oracle“ teikia daug funkcijų, leidžiančių manipuliuoti ir dirbti su kolekcijomis. Šios funkcijos yra labai naudingos programoje nustatant ir modifikuojant skirtingą kolekcijų atributą. Šioje lentelėje pateikiamos skirtingos funkcijos ir jų aprašymas.
Metodas | apibūdinimas | Sintaksė |
ESA (n) | Šis metodas pateiks loginius rezultatus. Jis grąžins „TRUE“, jei toje kolekcijoje yra n -tasis elementas, kitaip jis pateiks FALSE. Neinicijuotame rinkinyje galima naudoti tik EXISTS funkcijas | |
COUNT | Nurodo bendrą kolekcijoje esančių elementų skaičių | |
LIMIT | Tai grąžina maksimalų kolekcijos dydį. „Varray“ jis grąžins nustatytą dydį. Įdėtoms lentelėms ir indeksams pagal lenteles ji suteikia NULL | |
PIRMAS | Grąžina pirmojo rinkinių indekso kintamojo (indekso) vertę | |
PASKUTINIS | Grąžina paskutinio rinkinių indekso kintamojo (indekso) vertę | |
PRIEŠ (n) | Grąžina prieš indekso kintamąjį n -ojo elemento rinkinyje . Jei nėra ankstesnės indekso vertės, grąžinama NULL | |
TOLESNIS (n) | Grąžina indekso kintamąjį n -ojo elemento rinkinyje . Jei nėra sėkmingo indekso vertės, grąžinama NULL | |
IŠPLĖSTI | Pabaigia vieną kolekcijos elementą pabaigoje | |
IŠPLĖTTI (n) | Išplečia n elementus kolekcijos pabaigoje | |
IŠPLĖTTI (n, i) | Išplečia n i -ojo elemento egzempliorių kolekcijos pabaigoje | |
APKARPYTI | Pašalina vieną elementą iš kolekcijos pabaigos | |
TRIM (n) | Pašalina n elementus iš kolekcijos pabaigos | |
IŠTRINTI | Ištrina visus elementus iš kolekcijos. Padaro kolekciją tuščią | |
IŠTRINTI (n) | Ištrinamas n-tasis elementas iš kolekcijos. Jei n -tasis elementas yra NULL, tai nieko nepadarys | |
IŠTRINTI (m, n) | Ištrina diapazonas m elementas d -n -oji surinkimo |
1 pavyzdys: Įrašo tipas paprogramės lygiu
Šiame pavyzdyje mes pamatysime, kaip užpildyti kolekciją naudojant „BULK COLLECT“ ir kaip nurodyti kolekcijos duomenis.
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;/
Kodo paaiškinimas:
- 2–8 kodo eilutė : įrašo tipas „emp_det“ deklaruojamas su stulpeliais emp_no, emp_name, alga ir duomenų tipo NUMBER, VARCHAR2, NUMBER, NUMBER valdytoju.
- 9 kodo eilutė: įrašo tipo elemento „emp_det“ kolekcijos „emp_det_tbl“ kūrimas
- 10 kodo eilutė: kintamojo „guru99_emp_rec“ paskelbimas tipu „emp_det_tbl“ ir inicijavimas naudojant nulinį konstruktorių.
- Kodo eilutė 12-15: Duomenų pavyzdžiai įterpiami į lentelę „emp“.
- Kodo 16 eilutė: įvykdyti įterpimo operaciją.
- 17 kodo eilutė: Įrašų gavimas iš „emp“ lentelės ir rinkinio kintamojo užpildymas kaip masinis, naudojant komandą „BULK COLLECT“. Dabar kintamajame „guru99_emp_rec“ yra visi įrašai, esantys lentelėje „emp“.
- Kodo eilutė 19–26: „FOR“ kilpos nustatymas naudojant visus po vieną esančius rinkinio įrašus. Surinkimo metodas FIRST ir LAST naudojamas kaip apatinė ir aukščiausia kontūro riba.
Išvestis : Kaip matote aukščiau pateiktoje ekrano kopijoje, kai vykdomas aukščiau pateiktas kodas, gausite šią išvestį
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----------------------------------------------