Oracle PL / SQL Cursor: Implicit, Explicit, Cursor FOR Loop (Exempel)

Innehållsförteckning:

Anonim

Vad är CURSOR i PL / SQL?

En markör är en pekare till detta sammanhang. Oracle skapar kontextområde för bearbetning av ett SQL-uttalande som innehåller all information om uttalandet.

PL / SQL låter programmeraren styra sammanhangsområdet genom markören. En markör innehåller raderna som returneras av SQL-satsen. Den uppsättning rader som markören håller kallas aktiv uppsättning. Dessa markörer kan också namnges så att de kan hänvisas från en annan plats i koden.

I denna handledning lär du dig-

  • Implicit markör
  • Explicit markör
  • Markörattribut
  • FOR Loop Cursor statement

Markören är av två typer.

  • Implicit markör
  • Explicit markör

Implicit markör

Närhelst några DML-operationer inträffar i databasen skapas en implicit markör som innehåller de berörda raderna, i den specifika operationen. Dessa markörer kan inte namnges och därför kan de inte styras eller hänvisas från en annan plats i koden. Vi kan endast hänvisa till den senaste markören genom markörattributen.

Explicit markör

Programmerare får skapa namngivna kontextområden för att utföra sina DML-operationer för att få mer kontroll över det. Den explicita markören ska definieras i deklarationsavsnittet i PL / SQL-blocket, och den skapas för 'VÄLJ' -uttrycket som måste användas i koden.

Nedan följer steg som är involverade i arbetet med tydliga markörer.

  • Markera markören

    Att deklarera markören betyder helt enkelt att skapa ett namngivet sammanhang för "SELECT" -uttrycket som definieras i deklarationsdelen. Namnet på detta sammanhang är samma som markörens namn.

  • Öppnande markör

    Öppning av markören instruerar PL / SQL att allokera minnet till den här markören. Det gör markören redo att hämta posterna.

  • Hämtar data från markören

    I denna process körs 'VÄLJ' -uttrycket och raderna som hämtas lagras i det tilldelade minnet. Dessa kallas nu som aktiva uppsättningar. Att hämta data från markören är en aktivitet på postnivå som innebär att vi kan komma åt data på ett post-för-post-sätt.

    Varje hämtningsuttalande hämtar en aktiv uppsättning och innehåller informationen för den aktuella posten. Detta uttalande är samma som 'SELECT' -uttryck som hämtar posten och tilldelar variabeln i 'INTO' -satsen, men det kommer inte att ge några undantag.

  • Stänga markören

    När alla poster har hämtats nu måste vi stänga markören så att minnet som tilldelats detta sammanhang släpps.

Syntax:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • I ovanstående syntax innehåller deklarationsdelen markördeklarationen.
  • Markören skapas för uttalandet 'VÄLJ' som anges i markördeklarationen.
  • I exekveringsdelen är den deklarerade markören inställd i FOR-slingan och slingvariabeln 'I' kommer att fungera som markörvariabel i det här fallet.

Exempel 1 : I det här exemplet projicerar vi alla anställdas namn från emp-tabellen med hjälp av en cursor-FOR-loop.

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

Produktion

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Kodförklaring:

  • Kodrad 2 : Förklarar markören guru99_det för uttalandet 'VÄLJ emp_name FROM emp'.
  • Kodrad 4 : Konstruera 'FOR' -slingan för markören med slingvariabeln lv_emp_name.
  • Kodrad 5: Skriv ut anställdas namn i varje iteration av slingan.
  • Kodrad 8: Avsluta slingan

Obs! I Cursor-FOR-loop kan markörattribut inte användas eftersom öppning, hämtning och stängning av markören implicit görs av FOR-loop.