Kaj je CURSOR v PL / SQL?
Kazalec je kazalec na to kontekstno območje. Oracle ustvari kontekstno območje za obdelavo stavka SQL, ki vsebuje vse informacije o stavku.
PL / SQL programerju omogoča, da preko kazalca nadzoruje območje konteksta. Kazalec vsebuje vrstice, ki jih vrne stavek SQL. Niz vrstic, ki ga ima kurzor, se imenuje aktivni niz. Te kazalce lahko poimenujete tudi tako, da jih je mogoče napotiti z drugega mesta kode.
V tej vadnici boste izvedeli-
- Implicitni kazalnik
- Izrecni kazalec
- Atributi kazalca
- Izjava za kazalec zanke
Kazalec je dveh vrst.
- Implicitni kazalnik
- Izrecni kazalec
Implicitni kazalnik
Kadar koli se v bazi podatkov zgodi katera koli operacija DML, se v tej operaciji ustvari implicitni kurzor, ki vsebuje prizadete vrstice. Teh kazalcev ni mogoče poimenovati in jih zato ni mogoče nadzorovati ali napotiti z drugega mesta kode. Skozi atribute kurzorja se lahko sklicujemo samo na najnovejši kazalec.
Izrecni kazalec
Programerji lahko ustvarijo imenovano kontekstno območje za izvajanje svojih operacij DML, da dobijo večji nadzor nad njim. Izrecni kurzor je treba definirati v odseku deklaracije bloka PL / SQL in ustvarjen je za stavek 'SELECT', ki ga je treba uporabiti v kodi.
Spodaj so navedeni koraki za delo z eksplicitnimi kazalci.
- Izjava kurzorja
Deklaracija kurzorja preprosto pomeni ustvariti eno imenovano področje konteksta za stavek 'SELECT', ki je definiran v delu deklaracije. Ime tega kontekstnega območja je enako imenu kurzorja.
- Odpiranje kurzorja
Če odprete kurzor, boste PL / SQL dobili navodilo, naj dodeli pomnilnik za ta kazalec. Kazalec bo pripravljen za prenos zapisov.
- Pridobivanje podatkov iz kazalca
V tem postopku se izvede stavek 'SELECT' in pridobljene vrstice se shranijo v dodeljenem pomnilniku. Ti se zdaj imenujejo aktivni nizi. Pridobivanje podatkov s kazalca je dejavnost na ravni zapisa, kar pomeni, da lahko do podatkov dostopamo na način za zapis.
Vsak stavek za pridobivanje bo prinesel en aktivni niz in vsebuje informacije o tem zapisu. Ta stavek je enak stavku 'SELECT', ki pridobi zapis in dodeli spremenljivki v stavku 'INTO', vendar ne bo povzročil nobenih izjem.
- Zapiranje kurzorja
Ko je zdaj že ves zapis, moramo zapreti kazalko, da se sprosti pomnilnik, dodeljen temu kontekstnemu območju.
Sintaksa:
DECLARECURSORIS
- V zgornji sintaksi del izjave vsebuje izjavo kazalca in spremenljivko kazalca, v kateri bodo dodeljeni pridobljeni podatki.
- Kazalec je ustvarjen za stavek 'SELECT', ki je podan v deklaraciji kurzorja.
- V delu za izvajanje se deklarirani kurzor odpre, prenese in zapre.
Atributi kazalca
Implicitni kurzor in eksplicitni kurzor imata določene lastnosti, do katerih je mogoče dostopati. Ti atributi dajejo več informacij o operacijah kurzorja. Spodaj so navedeni različni atributi kazalca in njihova uporaba.
Atribut kazalke | Opis |
% NAJDENO | Vrne logični rezultat 'TRUE', če je zadnja operacija pridobivanja uspešno zajela zapis, sicer pa vrne FALSE. |
%NI NAJDENO | To deluje nasprotno od% FOUND, vrnilo bo 'TRUE', če najnovejša operacija pridobivanja ne more pridobiti nobenega zapisa. |
% ISOPEN | Vrne logični rezultat 'TRUE', če je dani kazalec že odprt, sicer vrne 'FALSE' |
% ROWCOUNT | Vrne številčno vrednost. Podaja dejansko število zapisov, na katere je vplivala dejavnost DML. |
Primer 1 : V tem primeru bomo videli, kako razglasiti, odpreti, pridobiti in zapreti eksplicitni kurzor.
Vsa imena zaposlenega bomo projicirali iz emp tabele s kazalcem. Atribut kurzorja bomo uporabili tudi za nastavitev zanke, da iz kurzorja pobere ves zapis.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Izhod
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Razlaga kode:
- Vrstica kode 2 : razglasitev kazalca guru99_det za stavek 'SELECT emp_name FROM emp'.
- Vrstica kode 3 : prijava spremenljivke lv_emp_name.
- Vrstica kode 5 : Odpiranje kazalca guru99_det.
- Vrstica kode 6: Nastavitev stavka Basic loop za pridobivanje vseh zapisov v tabeli 'emp'.
- 7. vrstica kode: pridobi podatke guru99_det in vrednost dodeli lv_emp_name.
- Vrstica kode 9: Z atributom kazalke '% NOTFOUND' ugotovite, ali je zajet ves zapis v kazalcu. Če je pridobljen, bo vrnil 'TRUE' in nadzor bo izstopil iz zanke, sicer bo nadzor še naprej pridobival podatke iz kazalke in jih natisnil.
- Koda 11: Pogoj EXIT za stavek zanke.
- Vrstica kode 12: Natisnite pridobljeno ime zaposlenega.
- Vrstica kode 14: Z atributom kazalca '% ROWCOUNT' poiščite skupno število zapisov, ki so bili v kazalcu prizadeti / pridobljeni.
- Vrstica kode 15: Po izstopu iz zanke se kazalka zapre in pomnilnik se sprosti.
Izjava za kazalec zanke
Stavek "FOR LOOP" lahko uporabite za delo s kazalci. V stavku FOR zanke lahko namesto omejitve obsega damo ime kurzorja, tako da bo zanka delovala od prvega zapisa kurzorja do zadnjega zapisa kurzorja. Spremenljivka kazalca, odpiranje kurzorja, pridobivanje in zapiranje kazalca bo implicitno izvedena z zanko FOR.
Sintaksa:
DECLARECURSORIS
- V zgornji sintaksi del izjave vsebuje izjavo kazalca.
- Kazalec je ustvarjen za stavek 'SELECT', ki je podan v deklaraciji kurzorja.
- V izvedbenem delu je deklarirani kurzor nastavljen v zanko FOR in spremenljivka zanke 'I' se bo v tem primeru obnašala kot spremenljivka kurzorja.
Primer 1 : V tem primeru bomo projicirali vsa imena zaposlenih iz tabele emp s pomočjo zanke kurzor-FOR.
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;/
Izhod
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
Razlaga kode:
- Vrstica kode 2 : razglasitev kazalca guru99_det za stavek 'SELECT emp_name FROM emp'.
- Vrstica kode 4 : Konstruiranje zanke 'FOR' za kazalko s spremenljivko zanke lv_emp_name.
- Vrstica kode 5: Tiskanje imena zaposlenega v vsaki ponovitvi zanke.
- Vrstica kode 8: Zapustite zanko
Opomba: V zanki Cursor-FOR atributov kurzorja ni mogoče uporabiti, saj odpiranje, pridobivanje in zapiranje kurzorja implicitno izvaja zanka FOR.