Oracle PL / SQL kolekcijas: attēli, ligzdoti & Indekss pēc tabulām

Satura rādītājs:

Anonim

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ā " (). Par šīm iepriekšminētajām kolekciju kategorijām jūs uzzināsiet tālāk zemāk esošajā sadaļā.

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:

TYPE  IS 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:

TYPE  IS 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

TYPE  IS 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 . EXISTS (elementa_pozīcija)
COUNT Norāda kopējo kolekcijā esošo elementu skaitu .COUNT
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 . LIMIT
PIRMAIS Atgriež kolekciju pirmā indeksa mainīgā (apakšindeksa) vērtību . PIRMAIS
PĒDĒJAIS Atgriež kolekciju pēdējā indeksa mainīgā (apakšindeksa) vērtību . PĒDĒJĀ
PRIOR (n) Atgriež pirms indekss mainīgs kolekcijā n th elementu. Ja pirms indeksa vērtības nav, tiek atgriezta vērtība NULL . PIRMS (n)
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 . Nākamais (n)
PAGARINĀT Beigās pagarina vienu kolekcijas elementu . PAPILDINĀT
PAPLAŠINĀT (n) Paplašina n elementus kolekcijas beigās . EXTEND (n)
PAPLAŠINĀT (n, i) Paplašina n kopijas i th elementa beigās kolekcijas . EXTEND (n, i)
TRIM Noņem kolekcijas beigās vienu elementu . TRIM
TRIM (n) Noņem kolekcijas beigās n elementus . TRIM (n)
DZĒST Dzēš visus elementus no kolekcijas. Padara kolekciju tukšu . IZDZĒST
Dzēst (n) Dzēš n-to elementu no kolekcijas. Ja n- tais elements ir NULL, tad tas neko nedarīs . IZDZĒST (n)
Dzēst (m, n) Dzēš elementu diapazonā no m th līdz n th kolekcijā . DELETE (m, n)

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----------------------------------------------