Kas ir kolekcija?
Kolekcija ir sakārtota noteiktu datu tipu elementu grupa. Tā var būt vienkārša datu tipa vai sarežģīta datu veida kolekcija (piemēram, lietotāja definēti vai ierakstu veidi).
Kolekcijā katrs elements tiek identificēts ar terminu, ko sauc par “apakšindeksu”. Katram kolekcijas vienumam tiek piešķirts unikāls apakšindekss. Šīs kolekcijas datus var apstrādāt vai iegūt, atsaucoties uz šo unikālo apakšrakstu.
Kolekcijas ir visnoderīgākās, ja ir jāapstrādā vai jāapstrādā lieli viena tipa dati. Kolekcijas var aizpildīt un apstrādāt kā veselas, izmantojot Oracle opciju 'BULK'.
Šajā apmācībā jūs uzzināsiet
- Kas ir kolekcija?
- Varrays
- Ligzdotas tabulas
- Indekss pa tabulai
- Konstruktora un inicializācijas koncepcija kolekcijās
- Kolekcijas metodes
Kolekcijas tiek klasificētas, pamatojoties uz struktūru, indeksu un krātuvi, kā parādīts zemāk.
- Rādītāji pa tabulām (pazīstami arī kā Asociatīvie masīvi)
- Ligzdotas tabulas
- Varrays
Jebkurā brīdī datus uz kolekciju var apzīmēt ar trim terminiem Kolekcijas nosaukums, Apakšindekss, Lauka / Kolonnas nosaukums kā "
Varrays
Varray ir kolekcijas metode, kurā tiek fiksēts masīva lielums. Masīva lielumu nevar pārsniegt tā fiksēto vērtību. Varray indeksam ir skaitliska vērtība. Tālāk ir aprakstīti Varrays atribūti.
- Augšējā limita lielums ir fiksēts
- Apdzīvots secīgi, sākot ar indeksu “1”
- Šis kolekcijas veids vienmēr ir blīvs, ti, mēs nevaram izdzēst nevienu masīva elementu. Varray var izdzēst kopumā vai arī to var apgriezt no gala.
- Tā kā tam vienmēr ir blīvs raksturs, tam ir ļoti maza elastība.
- Tas ir piemērotāk izmantot, ja ir zināms masīva lielums, un veikt līdzīgas darbības visiem masīva elementiem.
- Apakšindekss un secība vienmēr paliek stabila, ti, kolekcijas indekss un skaits vienmēr ir vienādi.
- Pirms to izmantošanas programmās, tie ir jāinicializē. Jebkura darbība (izņemot EXISTS darbību) ar neinicializētu kolekciju radīs kļūdu.
- To var izveidot kā datu bāzes objektu, kas ir redzams visā datu bāzē vai apakšprogrammas iekšpusē un ko var izmantot tikai šajā apakšprogrammā.
Zemāk redzamais attēls paskaidros Varray (blīvs) atmiņas sadalījumu shematiski.
Apakšraksts | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vērtība | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
VARRAY sintakse:
TYPEIS VARRAY ( ) OF ;
- Iepriekš minētajā sintaksē type_name tiek deklarēts kā “DATA_TYPE” veida VARRAY norādītajam lieluma ierobežojumam. Datu tips var būt vienkāršs vai sarežģīts.
Ligzdotas tabulas
Ligzdota tabula ir kolekcija, kurā masīva lielums nav noteikts. Tam ir ciparu apakšindeksa tips. Zemāk ir vairāk aprakstu par ligzdoto tabulu tipu.
- Ligzdotajai tabulai nav augšējā lieluma ierobežojuma.
- Tā kā augšējā lieluma ierobežojums nav noteikts, kolekcija, atmiņa katru reizi jāpaplašina, pirms mēs to izmantojam. Mēs varam paplašināt kolekciju, izmantojot “EXTEND” atslēgvārdu.
- Apdzīvots secīgi, sākot ar indeksu “1”.
- Šis kolekcijas veids var būt gan blīvs, gan reti , ti, mēs varam izveidot kolekciju kā blīvu, un mēs varam arī nejauši izdzēst atsevišķu masīva elementu, kas to padara tikpat reti.
- Tas dod lielāku elastību attiecībā uz masīva elementa dzēšanu.
- Tas tiek glabāts sistēmas ģenerētajā datu bāzes tabulā, un to var izmantot atlases vaicājumā, lai iegūtu vērtības.
- Apakš indekss un secība nav stabila, ti, masīva elementa indekss un skaits var atšķirties.
- Pirms to izmantošanas programmās, tie ir jāinicializē. Jebkura darbība (izņemot EXISTS darbību) ar neinicializēto kolekciju radīs kļūdu.
- To var izveidot kā datu bāzes objektu, kas ir redzams visā datu bāzē vai apakšprogrammas iekšpusē un ko var izmantot tikai šajā apakšprogrammā.
Zemāk redzamais attēls paskaidros ligzdotās tabulas (blīvas un retas) sadalījumu atmiņā. Melnās krāsas elementu telpa apzīmē tukšo elementu kolekcijā, ti, reti.
Apakšraksts | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Vērtība (blīva) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Vērtība (reti) | Qwe | Asd | Afg | Asd | Wer |
Ligzdotās tabulas sintakse:
TYPEIS TABLE OF ;
- Iepriekš minētajā sintaksē type_name tiek deklarēts kā ligzdotu tabulu kolekcija, kuras tips ir “DATA_TYPE”. Datu tips var būt vienkāršs vai sarežģīts.
Indekss pa tabulai
Indekss pa tabulai ir kolekcija, kurā masīva lielums nav noteikts. Atšķirībā no citiem kolekciju veidiem, indeksu pa tabulām kolekcijā apakš indeksu var definēt lietotājs. Tālāk ir norādīti katra indeksa atribūti.
- Apakšindekss var būt vesels skaitlis vai virknes. Kolekcijas izveidošanas laikā jāpiemin apakšindeksa tips.
- Šīs kolekcijas netiek glabātas secīgi.
- Viņiem vienmēr ir reti raksturs.
- Masīva lielums nav noteikts.
- Tos nevar saglabāt datu bāzes kolonnā. Tos izveido un izmanto jebkurā konkrētās sesijas programmā.
- Tie dod lielāku elastību attiecībā uz apakšraksta uzturēšanu.
- Abonementiem var būt arī negatīva indeksu secība.
- Tos ir piemērotāk izmantot salīdzinoši mazākām kolektīvajām vērtībām, kurās kolekciju var inicializēt un izmantot tajās pašās apakšprogrammās.
- Pirms to lietošanas nav nepieciešams tos inicializēt.
- To nevar izveidot kā datu bāzes objektu. To var izveidot tikai apakšprogrammā, kuru var izmantot tikai šajā apakšprogrammā.
- BULK COLLECT nevar izmantot šajā kolekcijas tipā, jo apakšraksts ir skaidri jānorāda katram kolekcijas ierakstam.
Zemāk redzamajā attēlā tiks shemātiski izskaidrots ligzdotās tabulas (reti) atmiņas sadalījums. Melnās krāsas elementu telpa apzīmē tukšo elementu kolekcijā, ti, reti.
Apakšraksts (varchar) | PIRMAIS | OTRAIS | TREŠAIS | CETURTĀS | PIEKTĀ | SESTAIS | Septiņpadsmit |
Vērtība (reti) | Qwe | Asd | Afg | Asd | Wer |
Rādītāju tabulas sintakse
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Iepriekš aprakstītajā sintaksē type_name tiek deklarēts kā veida “DATA_TYPE” indekss pa tabulām. Datu tips var būt vienkāršs vai sarežģīts. Mainīgais subsciprt / index tiek norādīts kā VARCHAR2 tips, bet maksimālais lielums - 10.
Konstruktora un inicializācijas koncepcija kolekcijās
Konstruktori ir iebūvētā funkcija, ko nodrošina orākuls, kuram ir tāds pats nosaukums kā objektam vai kolekcijām. Tie tiek izpildīti vispirms, kad objekts vai kolekcijas sesijas laikā tiek novirzītas pirmo reizi. Tālāk ir norādītas svarīgas konstruktora detaļas kolekcijas kontekstā:
- Kolekcijās šie konstruktori ir skaidri jāaicina, lai to inicializētu.
- Gan Varray, gan Nested tabulas ir jāinicializē, izmantojot šos konstruktorus, pirms tiek iekļautas programmā.
- Konstruktors netieši paplašina atmiņas piešķiršanu kolekcijai (izņemot Varray), tādējādi konstruktors var arī piešķirt mainīgos lielumiem kolekcijām.
- Vērtību piešķiršana kolekcijai, izmantojot konstruktorus, nekad nepadarīs kolekciju retu.
Kolekcijas metodes
Oracle nodrošina daudzas funkcijas, lai manipulētu un strādātu ar kolekcijām. Šīs funkcijas ir ļoti noderīgas programmā, lai noteiktu un modificētu dažādo kolekciju atribūtu. Šajā tabulā būs norādītas dažādas funkcijas un to apraksts.
Metode | Apraksts | Sintakse |
ESOŠS (n) | Šī metode atgriezīs Būla rezultātus. Tas atgriezīs “TRUE”, ja šajā kolekcijā ir n- tais elements, pretējā gadījumā tas atgriezīsies FALSE. Neinicializētā kolekcijā var izmantot tikai EXISTS funkcijas | |
COUNT | Norāda kopējo kolekcijā esošo elementu skaitu | |
LIMIT | Tas atgriež maksimālo kolekcijas lielumu. Varray gadījumā tas atgriezīs definēto fiksēto izmēru. Nested tabulai un indeksam pa tabulai tas dod NULL | |
PIRMAIS | Atgriež kolekciju pirmā indeksa mainīgā (apakšindeksa) vērtību | |
PĒDĒJAIS | Atgriež kolekciju pēdējā indeksa mainīgā (apakšindeksa) vērtību | |
PRIOR (n) | Atgriež pirms indekss mainīgs kolekcijā n th elementu. Ja pirms indeksa vērtības nav, tiek atgriezta vērtība NULL | |
NEXT (n) | Atgriežas izdodas indeksa mainīgo kolekcija n th elementu. Ja nav veiksmīgas indeksa vērtības, tiek atgriezta vērtība NULL | |
PAGARINĀT | Beigās pagarina vienu kolekcijas elementu | |
PAPLAŠINĀT (n) | Paplašina n elementus kolekcijas beigās | |
PAPLAŠINĀT (n, i) | Paplašina n kopijas i th elementa beigās kolekcijas | |
TRIM | Noņem kolekcijas beigās vienu elementu | |
TRIM (n) | Noņem kolekcijas beigās n elementus | |
DZĒST | Dzēš visus elementus no kolekcijas. Padara kolekciju tukšu | |
Dzēst (n) | Dzēš n-to elementu no kolekcijas. Ja n- tais elements ir NULL, tad tas neko nedarīs | |
Dzēst (m, n) | Dzēš elementu diapazonā no m th līdz n th kolekcijā |
1. piemērs: Ieraksta veids apakšprogrammas līmenī
Šajā piemērā mēs redzēsim, kā aizpildīt kolekciju, izmantojot “BULK COLLECT”, un kā atsaukties uz kolekcijas datiem.
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;/
Koda skaidrojums:
- Kodu rinda 2-8 : ieraksta veids “emp_det” tiek deklarēts ar kolonnām emp_no, emp_name, algu un datu tipa NUMBER, VARCHAR2, NUMBER, NUMBER pārvaldnieku.
- 9. koda rindiņa: ieraksta tipa elementa “emp_det” kolekcijas “emp_det_tbl” izveide
- 10. koda rindiņa: mainīgā “guru99_emp_rec” deklarēšana par “emp_det_tbl” tipu un inicializēšana ar nulles konstruktoru.
- Kodu rinda 12-15: datu parauga ievietošana tabulā 'emp'.
- Kodu rinda 16: Ievietošanas darījuma veikšana.
- 17. koda rindiņa: ierakstu ielāde no tabulas 'emp' un kolekcijas mainīgā aizpildīšana kā masveida daļa, izmantojot komandu BULK COLLECT. Tagad mainīgais 'guru99_emp_rec' satur visu ierakstu, kas atrodas tabulā 'emp'.
- Kodu rinda 19-26: cilnes “FOR” iestatīšana, izmantojot visu kolekcijas ierakstu drukāšanu pa vienam. Vākšanas metode FIRST un LAST tiek izmantota kā apakšējā un augstākā cilpas robeža.
Izeja : kā redzat iepriekš redzamajā ekrānuzņēmumā, kad tiek izpildīts iepriekš minētais kods, jūs saņemsiet šādu izvadi
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----------------------------------------------