Articles

Oracle PL / SQL Cursor: Implicit, Explicit, Cursor FOR Loop [exempel]

vad är markören i PL/SQL?

en markör är en pekare till detta kontextområde. Oracle skapar kontextområde för bearbetning av en SQL-sats som innehåller all information om satsen.

PL / SQL tillåter programmeraren att styra kontextområdet genom markören. En markör hå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ör attribut
  • för Loop markör uttalande

markören är av två typer.

  • Implicit markör
  • Explicit markör

Implicit markör

När någon DML-verksamhet sker i databasen skapas en implicit markör som håller de drabbade raderna, i den specifika åtgärden., Dessa markörer kan inte namnges och därför kan de inte kontrolleras eller hänvisas från en annan plats i koden. Vi kan bara hänvisa till den senaste markören genom markörsattributen.

Explicit markör

programmerare får skapa namngivna kontextområde för att utföra sina DML-operationer för att få mer kontroll över det. Den uttryckliga markören ska definieras i deklarationsavsnittet i PL / SQL-blocket, och den skapas för ”SELECT” – satsen som måste användas i koden.

nedan är steg som involverade i att arbeta med explicita markörer.,

  • att förklara markören

    att förklara markören betyder helt enkelt att skapa ett namngivet kontextområde för ”SELECT” – satsen som definieras i deklarationsdelen. Namnet på detta kontextområde är detsamma som markörnamnet.

  • öppna markören

    Öppna markören instruerar PL / SQL att allokera minnet för markören. Det gör markören redo att hämta posterna.

  • hämta Data från markören

    i denna process utförs ”SELECT” – satsen 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 postnivåaktivitet som innebär att vi kan komma åt data på ett post-för-post-sätt.

    varje hämtningsutdrag hämtar en aktiv uppsättning och innehåller informationen för den specifika posten. Detta uttalande är detsamma som ”SELECT” – uttalande som hämtar posten och tilldelar variabeln i ” in ” – klausulen, men det kommer inte att kasta några undantag.

  • stänga markören

    När all post hämtas nu måste vi stänga markören så att minnet som tilldelas detta kontextområde kommer att släppas.,

Syntax:

  • i ovanstående syntax innehåller deklarationsdelen markördeklarationen och markörvariabeln där de hämtade data kommer att tilldelas.
  • markören skapas för ”SELECT” – satsen som anges i markördeklarationen.
  • i exekveringsdelen öppnas, hämtas och stängs den deklarerade markören.

markör attribut

både implicita markören och den explicita markören har vissa attribut som kan nås. Dessa attribut ger mer information om marköroperationerna., Nedan finns de olika markörsattributen och deras användning.

Cursor Attribute beskrivning
%hittade det returnerar det booleska resultatet ”TRUE” om den senaste hämtningsoperationen hämtade en post framgångsrikt, annars kommer det att returnera falskt.
%NOTFOUND det här fungerar motsatt %fann att det kommer att returnera ”TRUE” om den senaste hämtningsoperationen inte kunde hämta någon post.,
%ISOPEN det returnerar Booleska resultatet’ TRUE ’om den givna markören redan öppnas, annars returnerar den ’FALSE’
%ROWCOUNT det returnerar det numeriska värdet. Det ger det faktiska antalet poster som påverkades av DML-aktiviteten.

exempel 1: i det här exemplet kommer vi att se hur du deklarerar, öppnar, hämtar och stänger den explicita markören.

vi projicerar alla medarbetarnas namn från emp-tabellen med en markör., Vi kommer också att använda markörsattribut för att ställa in slingan för att hämta all post från markören.

utgång

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

kod förklaring:

  • kodlinje 2: förklara markören guru99_det för Uttalande ’välj emp_name från emp’.
  • kodlinje 3: deklarera variabel lv_emp_name.
  • kodlinje 5: Öppna markören guru99_det.
  • kodrad 6: Ställa in Basic loop-satsen för att hämta alla poster i ’emp’ – tabellen.,
  • kodlinje 7: hämtar guru99_det-data och tilldelar värdet till lv_emp_name.
  • kodrad 9: använd markörsattributet %NOTFOUND för att hitta om all post i markören hämtas. Om hämtad kommer den att returnera ”TRUE” och kontrollen kommer att gå ur slingan, annars kommer kontrollen att fortsätta hämta data från markören och skriva ut data.
  • kodlinje 11: avsluta villkor för loop uttalande.
  • kodlinje 12: Skriv ut det hämtade medarbetarnamnet.,
  • kodlinje 14: använd markörsattributet %ROWCOUNT för att hitta det totala antalet poster som påverkades / hämtades i markören.
  • kodlinje 15: efter att ha lämnat loopen stängs markören och det tilldelade minnet är inställt gratis.

för Loop Cursor statement

”FOR LOOP” statement kan användas för att arbeta med markörer. Vi kan ge markörnamnet istället för intervallgräns i For loop-satsen så att slingan fungerar från den första posten av markören till den sista posten av markören., Markörvariabeln, öppning av markören, hämtning och stängning av markören görs implicit av FOR loop.

Syntax:

DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
  • i ovanstående syntax innehåller deklarationsdelen markörens deklaration.
  • markören skapas för ”SELECT” – satsen som anges i markördeklarationen.
  • i exekveringsdelen är den deklarerade markören inställd i For loop och loopvariabeln ” i ” kommer att bete sig som markörvariabel i det här fallet.,

exempel 1: i det här exemplet kommer vi att projicera allt medarbetarnamn från emp-tabellen med hjälp av en cursor-FOR loop.

utgång

Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY

kod förklaring:

  • kodlinje 2: förklara markören guru99_det för Uttalande ’välj emp_name från emp’.
  • kodrad 4: konstruera slingan ” för ” för markören med loopvariabeln lv_emp_name.
  • kodrad 5: skriva ut medarbetarens namn i varje iteration av slingan.,
  • kodrad 8: avsluta slingan

Obs: i markör-för loop kan markörsattribut inte användas eftersom öppning, hämtning och stängning av markören görs implicit av för loop.