Oracle PL / SQL-i kursor: implitsiitne, eksplitsiitne, kursor silmuse jaoks (näide)

Lang L: none (table-of-contents):

Anonim

Mis on kursor PL / SQL-is?

Kursor on selle kontekstipiirkonna kursor. Oracle loob SQL-lause töötlemiseks kontekstiala, mis sisaldab kogu teavet selle lause kohta.

PL / SQL võimaldab programmeerijal konteksti ala kursori kaudu juhtida. Kursor hoiab SQL-i käsu tagastatud ridu. Rida, mida kursor hoiab, nimetatakse aktiivseks komplektiks. Neid kursoreid saab nimetada ka nii, et neile saaks suunata koodi teisest kohast.

Selles õpetuses saate teada

  • Kaudne kursor
  • Selgesõnaline kursor
  • Kursori atribuudid
  • Loopkursori avaldus FOR

Kursorit on kahte tüüpi.

  • Kaudne kursor
  • Selgesõnaline kursor

Kaudne kursor

Alati, kui andmebaasis toimuvad DML-toimingud, luuakse kaudne kursor, mis hoiab selles konkreetses toimingus mõjutatud ridu. Neid kursoreid ei saa nimetada ja seega ei saa neid juhtida ega suunata koodi teisest kohast. Kursori atribuutide kaudu saame viidata ainult kõige uuemale kursorile.

Selgesõnaline kursor

Programmeerijatel on lubatud DML-toimingute teostamiseks luua nimeline kontekstiala, et selle üle rohkem kontrolli saada. Selgesõnaline kursor tuleks määratleda PL / SQL-ploki deklaratsiooniosas ja see luuakse käsu 'SELECT' jaoks, mida tuleb koodis kasutada.

Allpool on toodud sammud, mis on seotud selgesõnaliste kursoritega töötamisega.

  • Kursori deklareerimine

    Kursori deklareerimine tähendab lihtsalt deklaratsiooniosas määratletud lause „SELECT” jaoks ühe nimega kontekstiala loomist. Selle kontekstiala nimi on sama kui kursori nimi.

  • Kursori avamine

    Kursori avamine juhendab PL / SQL-i selle kursori jaoks mälu eraldama. See teeb kursori kirjete toomiseks valmis.

  • Andmete toomine kursorilt

    Selles protsessis käivitatakse käsk 'SELECT' ja tõmmatud read salvestatakse eraldatud mällu. Neid nimetatakse nüüd aktiivseteks komplektideks. Kursorilt andmete hankimine on rekordtaseme tegevus, mis tähendab, et pääseme andmetele juurde rekordipõhiselt.

    Iga toomise lause toob ühe aktiivse komplekti ja sisaldab selle konkreetse kirje teavet. See lause on sama kui käsk 'SELECT', mis tõmbab kirje ja määrab muutujale klauslis 'INTO', kuid see ei tee erandeid.

  • Kursori sulgemine

    Kui kogu kirje on nüüd tõmmatud, peame kursori sulgema, et sellele kontekstialale eraldatud mälu vabaneks.

Süntaks:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • Ülaltoodud süntaksis sisaldab deklaratsiooniosa kursori deklaratsiooni.
  • Kursor luuakse käsu 'SELECT' jaoks, mis on antud kursori deklaratsioonis.
  • Täitmisosas on deklareeritud kursor seadistatud FOR-tsüklisse ja silmusmuutuja 'I' käitub sel juhul kursori muutujana.

Näide 1 : Selles näites projitseerime kogu töötaja nime emp tabelist, kasutades kursori-FOR silmus.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Väljund

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Koodi selgitus:

  • Koodirida 2 : Kursori „SELECT emp_name FROM emp” kursori guru99_detaili deklareerimine.
  • Koodirida 4 : Kursori „FOR” aasa konstrueerimine silmusmuutujaga lv_emp_name.
  • Koodirida 5: töötaja nime printimine igas tsükli iteratsioonis.
  • Koodirida 8: väljuge silmusest

Märkus . Kursori-FOR tsüklis ei saa kursori atribuute kasutada, sest FOR-silmus teeb kursori avamise, tõmbamise ja sulgemise kaudselt.