sql >> Databasteknik >  >> RDS >> Database

Vad är en markör i SQL och hur implementerar man den?

Markörer i SQL utgör en integrerad del av vilken databas som helst som i princip hjälper en användare att gå igenom databasen utan mycket krångel. Med hjälp av den här artikeln om Cursor i SQL kommer jag att ge dig alla nödvändiga detaljer som du måste behöva innan du blir våt av den.

Nedan är de ämnen jag kommer att diskutera i den här artikeln:

  • Vad är markör i SQL?
  • Typer av SQL-markörer
  • Syntax för en SQL-markör
  • Markörens livscykel

Vad är markör i SQL?

Markör i SQL är ett objekt som tillåter korsning över raderna i valfri resultatuppsättning. Med detta kan du bearbeta en enskild rad i en databas som returneras av en fråga. Det är ett temporärt arbetsområde eller kontextområde som skapas i minnessystemet under exekveringen av en SQL-sats som lagrar hämtad data från databasen och hjälper till med dess manipulation. Du kan betrakta det som ett arrangemang av rader tillsammans med en pekare som pekar på den aktuella raden. En markör är ett databasobjekt som kan innehålla mer än en rad men det kan endast behandla en rad åt gången. Uppsättningen rader som hålls av en markörspärr är känd som en aktiv uppsättning. Således kan du styra posten för en tabell i en singleton-teknik, dvs en rad vid vilken tidpunkt som helst.

Nu när du är bekant med vad som är en markör i SQL, låt oss nu gå vidare och ta en titt på dess olika typer.

Typer av SQL-markör

SQL tillhandahåller två typer av markörer som jag har listat nedan:

  1. Implicit markör

När DML-operationer som INSERT, UPDATE och DELETE bearbetas i databasen, genereras implicita markörer automatiskt och används av ramverket. Dessa typer av markörer används för intern bearbetning och kan inte kontrolleras eller hänvisas från ett annat kodområde. Implicita markörer i SQL håller bara de berörda raderna av operationen och kan endast referera till den senaste markören med markörattributen som visas nedan i tabellen.

Attribut Beskrivning
%FOUND Den returnerar TRUE om en INSERT-, UPDATE- eller DELETE-sats påverkar en eller flera rader eller en SELECT INTO-sats returnerar en eller flera rader. I andra fall kommer den att returnera FALSE.
%NOTFOUND Det är tekniskt sett motsatsen till %FOUND-attributet. Den returnerar TRUE om en INSERT-, UPDATE- eller DELETE-sats inte påverkar några rader eller om en SELECT INTO-sats inte returnerar några rader. Annars returnerar den bara FALSE.
%ISOPEN Detta attribut kommer alltid att returnera FALSE för implicita markörer eftersom SQL-markören stängs automatiskt omedelbart efter att den associerade SQL-satsen har körts.
%ROWCOUNT Den returnerar det totala antalet berörda rader av en INSERT-, UPDATE- eller DELETE-sats, eller raderna som returneras av en SELECT INTO-sats.
  1. Explicit markör

Denna typ av markör genereras när data bearbetas av en användare genom ett SQL-block. Generellt sett utlöser användningen av SELECT-frågan skapandet av en explicit markör och kan hålla mer än en rad men bearbeta bara en åt gången. Denna typ av markör används för att hålla de poster som finns i en kolumn. Detta tillåter programmerare att skapa ett namngivet sammanhangsområde för att utföra sina DML-operationer för bättre kontroll. Den måste också definieras i SQL-blocket och skapas i sin tur för en SELECT-fråga med den koden.

För att få en bättre förståelse av en markör, låt oss nu se vad som är syntaxen för en markör i SQL.

Syntax för en SQL-markör

Nedan är den allmänna syntaxen för att skapa en explicit markör.

CURSOR cursorName IS selectStatement;

Här:

cursorName – Detta representerar ett giltigt namn för markören

selectStatement – ​​Detta representerar en utvald fråga som returnerar flera rader

Låt oss nu gå vidare med den här artikeln och se livscykeln för en SQL-markör.

Markörens livscykel

Det finns i princip 5 stadier i livscykeln för en markör i SQL som jag har listat nedan:

  1. Deklarera
DECLARE cursorName CURSOR
FOR selectStatement;

Det här steget hjälper dig att ange namnet och datatypen för markören och SELECT-satsen kommer att definiera dess resultatuppsättning.

  1. Öppna
OPEN cursorName;

Det här steget låter dig öppna och fylla i markören genom att köra den.

  1. Hämta
FETCH NEXT FROM cursor INTO variableList;

Detta steg kommer att hämta en rad från markören och lagra den i en eller flera variabler.

[Valfritt] CheckStatus

WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM cursorName;
END;

Denna funktion returnerar status för den senaste FETCH-satsen som kördes mot markören. Om denna funktion returnerar 0 betyder det att FETCH-operationen lyckades. För att hämta alla rader från markören används WHILE-satsen.

  1. Stäng
CLOSE cursorName;

Detta steg hjälper dig att stänga markören efter att operationerna har slutförts.

  1. Deallokera
DEALLOCATE cursor_name;

Det här steget hjälper till att omallokera markören och frigöra minnesutrymme.

Med detta skulle jag vilja avsluta den här artikeln om Cursor in SQL. Jag hoppas att den här artikeln har hjälpt dig att tillföra värde till din kunskap. För mer information om SQL eller databaser, kan du hänvisa till vår omfattande läslista här:Databaser Edureka .

SQL Basics för nybörjare | Lär dig SQL | SQL-handledning för nybörjare | Edureka

Denna Edureka-video om "SQL Basics for Beginners" hjälper dig att förstå grunderna i SQL och även SQL-frågor som är mycket populära och viktiga.

Om du vill få en strukturerad utbildning i MySQL, kolla in vår MySQL DBA-certifieringsutbildning som kommer med instruktörsledd liveutbildning och verklig projektupplevelse. Den här utbildningen hjälper dig att förstå MySQL på djupet och hjälper dig att bemästra ämnet.

Har du en fråga till oss? Vänligen nämn det i kommentarsektionen i "Markör i SQL ” så återkommer jag till dig.


  1. Använda String[] selectionArgs i SQLiteDatabase.query()

  2. Stoppa (lång) körning av SQL-fråga i PostgreSQL när session eller begäranden inte längre existerar?

  3. Vad är den genomsnittliga lönen för en SQL-utvecklare?

  4. EXECUTE-behörigheten nekades för objektet 'xxxxxxx', databasen 'zzzzzzz', schemat 'dbo'