Oracle PL / SQL BULK COLLECT: FORALL -esimerkki

Sisällysluettelo:

Anonim

Mikä on BULK COLLECT?

BULK COLLECT vähentää kontekstinvaihtoa SQL: n ja PL / SQL-moottorin välillä ja antaa SQL-moottorin noutaa tietueet kerralla.

Oracle PL / SQL tarjoaa toiminnot, joiden avulla tietueet haetaan kerralla eikä haeta yksitellen. Tätä BULK COLLECT -ohjelmaa voidaan käyttää SELECT-käskyssä tietueiden täyttämiseen joukkona tai kohdistimen hakemiseen joukkona. Koska BULK COLLECT hakee tietueen BULK-muodossa, INTO-lausekkeen tulisi aina sisältää kokoelmatyyppinen muuttuja. BULK COLLECTin käytön tärkein etu on se, että se parantaa suorituskykyä vähentämällä tietokannan ja PL / SQL-moottorin välistä vuorovaikutusta.

Syntaksi:

SELECT  BULK COLLECT INTO bulk_varaible FROM 
;FETCH  BULK COLLECT INTO ;

Edellä olevassa syntaksissa BULK COLLECTia käytetään tietojen keräämiseen SELECT- ja FETCH-käskyistä.

Tässä opetusohjelmassa opit-

  • FORALL-lauseke
  • LIMIT-lauseke
  • BULK COLLECT -attribuutit

FORALL-lauseke

FORALL mahdollistaa DML-operaatioiden suorittamisen tiedoille irtotavarana. Se on samanlainen kuin FOR-silmukka-lause, paitsi että FOR-silmukassa asiat tapahtuvat ennätystasolla, kun taas FORALLissa ei ole LOOP-käsitettä. Sen sijaan kaikki tietyllä alueella olevat tiedot käsitellään samanaikaisesti.

Syntaksi:

FORALL in;

Edellä olevassa syntaksissa annettu DML-operaatio suoritetaan koko datalle, joka on alemman ja korkeamman alueen välillä.

LIMIT-lauseke

Joukkokeräyskonsepti lataa koko datan kohdekokoelmamuuttujaan joukkona eli koko data täytetään keräämismuuttujaan kerralla. Mutta tämä ei ole suositeltavaa, kun ladattava koko tietue on erittäin suuri, koska kun PL / SQL yrittää ladata koko datan, se kuluttaa enemmän istuntomuistia. Siksi on aina hyvä rajoittaa tämän joukkokeräystoiminnon kokoa.

Tämä kokorajoitus voidaan kuitenkin saavuttaa helposti lisäämällä ROWNUM-ehto SELECT-käskyyn, kun taas kohdistimen tapauksessa tämä ei ole mahdollista.

Tämän voittamiseksi Oracle on toimittanut LIMIT-lausekkeen, joka määrittelee joukkoon sisällytettävien tietueiden määrän.

Syntaksi:

FETCH  BULK COLLECT INTO  LIMIT ;

Yllä olevassa syntaksissa kohdistimen hakulauseke käyttää BULK COLLECT -käskyä LIMIT-lausekkeen kanssa.

BULK COLLECT -attribuutit

Samanlainen kohdistin määritteet IRTOLASTIALUSTEN COLLECT on% BULK_ROWCOUNT (n), joka palauttaa rivien vaikuttaa n : nnen DML selvitys FORALL lausuman, toisin sanoen se antaa lasken Records vaikutettu FORALL lausuman jokaisesta arvon kokoelmasta muuttuja. Termi 'n' osoittaa kokoelman arvosarjan, jolle rivien määrää tarvitaan.

Esimerkki 1 : Tässä esimerkissä heijastetaan kaikki työntekijöiden nimet emp taulukosta käyttämällä BULK COLLECT -ohjelmaa, ja aiomme myös nostaa kaikkien työntekijöiden palkkaa 5000: lla FORALL-sovelluksella.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/

Tuotos

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYSalary Updated

Koodin selitys:

  • Koodirivi 2 : Kohdistimen guru99_det julistaminen käskylle 'SELECT emp_name FROM emp'.
  • Koodirivi 3 : Lv_emp_name_tbl: n julistaminen VARCHAR2: n taulukkotyypiksi (50)
  • Koodirivi 4 : Ilmoitetaan lv_emp_name lv_emp_name_tbl-tyypiksi.
  • Koodirivi 6: Kohdistimen avaaminen.
  • Koodirivi 7: Kohdistimen hakeminen BULK COLLECT -toiminnolla, jonka LIMIT-koko on 5000 intl lv_emp_name -muuttuja.
  • Koodirivi 8-11: FOR-silmukan asettaminen koko kokoelman lv_emp_name tietueen tulostamiseen.
  • Koodirivi 12: FORALL-ohjelman avulla kaikkien työntekijöiden palkat päivitetään 5000: llä.
  • Koodirivi 14: Tapahtuman toteuttaminen.