Oracle PL / SQL kursors: netiešs, nepārprotams, kursora lokam (piemērs)

Satura rādītājs:

Anonim

Kas ir kursors PL / SQL?

Kursors ir rādītājs šai konteksta zonai. Oracle izveido konteksta apgabalu SQL priekšraksta apstrādei, kurā ir visa informācija par priekšrakstu.

PL / SQL ļauj programmētājam kontrolēt konteksta apgabalu, izmantojot kursoru. Kursors satur rindas, kuras atgriež SQL priekšraksts. Kursora turēto rindu kopa tiek saukta par aktīvo kopu. Šos kursorus var arī nosaukt, lai tos varētu novirzīt no citas koda vietas.

Šajā apmācībā jūs uzzināsiet-

  • Netiešais kursors
  • Skaidrs kursors
  • Kursora atribūti
  • FOR Loop Cursor paziņojums

Kursors ir divu veidu.

  • Netiešais kursors
  • Skaidrs kursors

Netiešais kursors

Ikreiz, kad datu bāzē notiek kādas DML darbības, tiek izveidots netiešs kursors, kas satur skartās rindas attiecīgajā operācijā. Šos kursorus nevar nosaukt, tāpēc tos nevar kontrolēt vai novirzīt no citas koda vietas. Caur kursora atribūtiem mēs varam atsaukties tikai uz jaunāko kursoru.

Skaidrs kursors

Programmētājiem ir atļauts izveidot nosauktu konteksta apgabalu, lai veiktu savas DML darbības, lai iegūtu lielāku kontroli pār to. Skaidrs kursors ir jādefinē PL / SQL bloka deklarācijas sadaļā, un tas ir izveidots priekšrakstam “SELECT”, kas jāizmanto kodā.

Tālāk ir norādītas darbības, kas saistītas ar darbu ar nepārprotamiem kursoriem.

  • Kursora deklarēšana

    Kursora deklarēšana nozīmē vienkārši izveidot vienu nosauktu konteksta apgabalu paziņojumam “SELECT”, kas definēts deklarācijas daļā. Šī konteksta apgabala nosaukums ir tāds pats kā kursora nosaukums.

  • Kursora atvēršana

    Atverot kursoru, PL / SQL tiks uzdots piešķirt atmiņu šim kursoram. Tas padarīs kursoru gatavu ierakstu ienešanai.

  • Notiek datu iegūšana no kursora

    Šajā procesā tiek izpildīts paziņojums 'SELECT', un iegūtās rindas tiek saglabātas atvēlētajā atmiņā. Tagad tos sauc par aktīvajiem kopumiem. Datu iegūšana no kursora ir ieraksta līmeņa darbība, kas nozīmē, ka mēs varam piekļūt datiem ierakstu veidā.

    Katrs ielādes priekšraksts iegūs vienu aktīvo kopu un glabās konkrētā ieraksta informāciju. Šis apgalvojums ir tāds pats kā 'SELECT', kas ienes ierakstu un piešķir mainīgajam klauzulā 'INTO', taču tas neizraisīs nekādus izņēmumus.

  • Kursora aizvēršana

    Kad viss ieraksts tagad ir iegūts, mums jāaizver kursors, lai tiktu atbrīvota šai konteksta zonai piešķirtā atmiņa.

Sintakse:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • Iepriekš minētajā sintaksē deklarācijas daļa satur kursora deklarāciju.
  • Kursors tiek izveidots paziņojumam “SELECT”, kas norādīts kursora deklarācijā.
  • Izpildes daļā deklarētais kursors tiek iestatīts FOR cilpā, un cilpas mainīgais 'I' šajā gadījumā rīkosies kā kursora mainīgais.

1. piemērs : Šajā piemērā mēs projicēsim visu darbinieku vārdu no emp tabulas, izmantojot kursora FOR cilpu.

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

Rezultāts

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Koda skaidrojums:

  • 2. koda rindiņa : paziņojuma “SELECT emp_name FROM emp” kursora deklarēšana guru99_det.
  • 4. koda rindiņa : Kursora “FOR” cilpas konstruēšana ar cilpas mainīgo lv_emp_name.
  • 5. koda rinda: darbinieka vārda drukāšana katrā cilpas atkārtojumā.
  • 8. koda rindiņa: izejiet no cilpas

Piezīme: Cursor-FOR cilpā kursora atribūtus nevar izmantot, jo FOR cilpā netieši notiek kursora atvēršana, ielāde un aizvēršana.