Articles

Oracle PL / SQL Cursor: Implicit, Explicit, Cursor pentru buclă [exemplu]

ce este cursorul în PL/SQL?

Un Cursor este un pointer pentru această zonă de context. Oracle creează zona de context pentru procesarea unei instrucțiuni SQL care conține toate informațiile despre declarație. PL / SQL permite programatorului să controleze zona de context prin intermediul cursorului. Un cursor ține rândurile returnate de instrucțiunea SQL. Setul de rânduri pe care îl ține cursorul este denumit set activ., Aceste cursoare pot fi, de asemenea, numite astfel încât să poată fi menționate dintr-un alt loc al Codului.

în acest tutorial veți învăța-

  • Cursor Implicit
  • Cursor Explicit
  • atribute Cursor
  • pentru instrucțiunea cursorului buclă

cursorul este de două tipuri.

  • Cursor Implicit
  • Cursor Explicit

Cursor Implicit

ori de câte ori orice operațiuni DML apar în baza de date, un cursor implicit este creat care deține rândurile afectate, în acea operație special., Aceste cursoare nu pot fi numite și, prin urmare, nu pot fi controlate sau menționate dintr-un alt loc al Codului. Ne putem referi doar la cel mai recent cursor prin atributele cursorului.

Cursor Explicit

programatorii au voie să creeze zona de context numită pentru a executa operațiunile lor DML pentru a obține mai mult control asupra acesteia. Cursorul explicit trebuie definit în secțiunea declarație a blocului PL/SQL și este creat pentru instrucțiunea „SELECT” care trebuie utilizată în cod.

mai jos sunt pașii care au implicat în lucrul cu cursoare explicite.,

  • declararea cursorului

    declararea cursorului înseamnă pur și simplu crearea unei zone de context numite pentru instrucțiunea „SELECT” care este definită în partea declarație. Numele acestei zone de context este același cu numele cursorului.

  • deschiderea cursorului

    deschiderea cursorului va instrui PL / SQL să aloce memoria pentru acest cursor. Acesta va face cursorul gata să-i aducă înregistrările.

  • preluarea datelor de la Cursor

    în acest proces, instrucțiunea „SELECT” este executată și rândurile preluate sunt stocate în memoria alocată., Acestea sunt numite acum ca seturi active. Preluarea datelor din cursor este o activitate la nivel de înregistrare, ceea ce înseamnă că putem accesa datele într-un mod record-by-record. fiecare declarație fetch va prelua un set activ și deține informațiile acelei înregistrări. Această declarație este aceeași cu declarația „SELECT” care preia înregistrarea și atribuie variabilei din clauza „INTO”, dar nu va arunca nicio excepție.

  • închiderea cursorului

    odată ce toată înregistrarea este preluată acum, trebuie să închidem cursorul astfel încât memoria alocată acestei zone de context să fie eliberată.,

sintaxa:

  • în sintaxa de mai sus, partea declarație conține declarația cursorului și variabila cursorului în care vor fi atribuite datele preluate.
  • cursorul este creat pentru instrucțiunea „SELECT” care este dată în declarația cursorului.
  • în partea de execuție, cursorul declarat este deschis, preluat și închis.

atributele cursorului

atât cursorul Implicit, cât și cursorul explicit au anumite atribute care pot fi accesate. Aceste atribute oferă mai multe informații despre operațiunile cursorului., Mai jos sunt diferitele atribute ale cursorului și utilizarea acestora.

Cursorul Atribut Descriere
%a fost Se întoarce Boolean rezultat „TRUE” dacă cea mai recentă aduce funcționare preluat o înregistrare cu succes, altfel va returna FALSE.
%NOTFOUND acest lucru funcționează opus %găsit va reveni „TRUE” în cazul în care cea mai recentă operațiune fetch nu a putut să aducă orice înregistrare.,
%ISOPEN returnează rezultatul Boolean „TRUE” dacă cursorul dat este deja deschis, altfel returnează „FALSE”
%ROWCOUNT returnează valoarea numerică. Acesta oferă numărul real de înregistrări care au fost afectate de activitatea DML.

Exemplu 1: În acest exemplu, vom vedea cum să declare, open, fetch și close cursor explicit.

vom proiecta toate numele angajatului din tabelul emp folosind un cursor., Vom folosi, de asemenea, atributul cursor pentru a seta bucla pentru a prelua toată înregistrarea de la cursor.

Ieșire

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3

Cod Explicație:

  • linie de Cod 2: Declararea cursorului guru99_det pentru declarație SELECTAȚI emp_name DIN emp’.
  • linia de cod 3: declararea lv_emp_name variabilă.
  • linia de cod 5: deschiderea cursorului guru99_det.
  • Cod linia 6: setarea instrucțiunii de buclă de bază pentru a prelua toate înregistrările din tabelul „emp”.,
  • Cod linia 7: preia datele guru99_det și atribuie valoarea lv_emp_name.
  • linia de cod 9: folosind atributul cursorului „% NOTFOUND ” pentru a afla dacă toată înregistrarea din cursor este preluată. Dacă este preluat, atunci se va întoarce „adevărat” și controlul va ieși din buclă, altfel controlul va continua să preia datele din cursor și să imprime datele.
  • linia de cod 11: condiție de ieșire pentru instrucțiunea buclă.
  • linia de cod 12: imprimați numele angajatului preluat.,
  • linia de cod 14: folosind atributul cursorului ‘% ROWCOUNT ‘ pentru a găsi numărul total de înregistrări care au fost afectate/preluate în cursor.
  • linia de cod 15: după ieșirea din buclă, cursorul este închis și memoria alocată este eliberată.

pentru instrucțiunea cursorului buclă

instrucțiunea”pentru buclă” poate fi utilizată pentru lucrul cu cursoare. Putem da numele cursorului în loc de limita intervalului în instrucțiunea FOR loop, astfel încât bucla să funcționeze de la prima înregistrare a cursorului până la ultima înregistrare a cursorului., Variabila cursor, deschiderea cursorului, preluarea și închiderea cursorului se va face implicit de către bucla FOR.

sintaxa:

DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
  • în sintaxa de mai sus, partea declarație conține declarația cursorului.
  • cursorul este creat pentru instrucțiunea „SELECT” care este dată în declarația cursorului.
  • în partea de execuție, cursorul declarat este setat în bucla FOR și variabila buclă ” I ” se va comporta ca variabilă cursor în acest caz.,

Exemplul 1: în acest exemplu, vom proiecta toate numele angajatului din tabelul emp folosind o buclă cursor-pentru.

Ieșire

Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY

Cod Explicație:

  • linie de Cod 2: Declararea cursorului guru99_det pentru declarație SELECTAȚI emp_name DIN emp’.
  • Cod Linie 4: construirea bucla „pentru” pentru cursorul cu lv_emp_name variabilă buclă.
  • Cod linia 5: imprimarea numele angajatului în fiecare iterație a buclei.,
  • linia de cod 8: ieșiți din buclă

Notă: În Cursor-FOR loop, atributele cursorului nu pot fi utilizate deoarece deschiderea, preluarea și închiderea cursorului se face implicit de FOR loop.