logo

Vad är markör i SQL?

Markör är ett tillfälligt minne eller en tillfällig arbetsstation. Den tilldelas av Databas Server vid tidpunkten för DML (Data Manipulation Language)-operationer på bordet av användaren. Markörer används för att lagra databastabeller.

Det finns två typer av markörer: implicita markörer och explicita markörer. Dessa förklaras enligt nedan.



  1. Implicita markörer: Implicita markörer är också kända som standardmarkörer för SQL SERVER. Dessa markörer tilldelas av SQL SERVER när användaren utför DML-operationer.
  2. Explicita markörer: Explicita markörer skapas av användare närhelst användaren kräver dem. Explicita markörer används för att hämta data från tabell på rad-för-rad-sätt.

Hur skapar man explicit markör?

  1. Deklarera markörobjekt

Syntax:

DECLARE cursor_name CURSOR FOR SELECT * FRÅN tabellnamn

Fråga:



DECLARE s1 CURSOR FOR SELECT * FROM studDetails>

2. Öppna Cursor Connection

java sträng till json

Syntax:

OPEN cursor_connection



Fråga:

OPEN s1>

Hämta data från markören Det finns totalt 6 metoder för att komma åt data från markören. De är följande:

  1. FÖRST används för att bara hämta den första raden från markörtabellen.
  2. SISTA används för att bara hämta den sista raden från markörtabellen.
  3. NÄSTA används för att hämta data i framåtriktning från markörtabellen.
  4. TIDIGARE används för att hämta data bakåt från markörtabellen.
  5. ABSOLUT n används för att hämta det exakta nthrad från markörtabellen.
  6. RELATIV n används för att hämta data på ett inkrementellt sätt såväl som ett dekrementellt sätt.

Syntax:

HÄMTA NÄSTA/FÖRSTA/SIST/FÖR/ABSOLUTE n/RELATIV n FRÅN cursor_name

Fråga:

FETCH FIRST FROM s1 FETCH LAST FROM s1 FETCH NEXT FROM s1 FETCH PRIOR FROM s1 FETCH ABSOLUTE 7 FROM s1 FETCH RELATIVE -2 FROM s1>
  • Stäng marköranslutningen

Syntax:

STÄNG cursor_name

Fråga:

CLOSE s1>
  • Avallokera markörminne

Syntax:

DEALLOCATE cursor_name

Fråga:

DEALLOCATE s1>

Hur skapar man en implicit markör?

En implicit markör är en markör som automatiskt skapas av PL/SQL när du kör en SQL-sats. Du behöver inte deklarera eller öppna en implicit markör explicit. Istället hanterar PL/SQL markören åt dig bakom kulisserna.

För att skapa en implicit markör i PL/SQL behöver du bara köra en SQL-sats. Till exempel, för att hämta alla rader från EMP-tabellen, kan du använda följande kod:

Fråga:

BEGIN FOR emp_rec IN SELECT * FROM emp LOOP DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.ename); END LOOP; END;>

I PL/SQL, när vi uppträder FÖRA IN , UPPDATERING eller RADERA operationer skapas en implicit markör automatiskt. Den här markören håller data som ska infogas eller identifierar raderna som ska uppdateras eller raderas. Du kan referera till den här markören som SQL-markören i din kod. Denna SQL-markör har flera användbara attribut.

  1. %FOUND är sant om den senaste SQL-operationen påverkade minst en rad.
  2. %NOTFOUND är sant om det inte påverkade några rader.
  3. %ROWCOUNT returnerar antalet berörda rader.
  4. %ISOPEN kontrollerar om markören är öppen.

Utöver dessa attribut är %BULK_ROWCOUNT och %BULK_EXCEPTIONS specifika för FORALL-satsen, som används för att utföra flera DML-operationer samtidigt. %BULK_ROWCOUNT returnerar antalet rader som påverkas av varje DML-operation, medan %BULK_EXCEPTION returnerar alla undantag som inträffade under operationerna.

Fråga:

CREATE TABLE Emp( EmpID INT PRIMARY KEY, Name VARCHAR(50), Country VARCHAR(50), Age int(2), Salary int(10) ); -- Insert some sample data into the Customers table INSERT INTO Emp (EmpID, Name,Country, Age, Salary) VALUES (1, 'Shubham', 'India','23','30000'), (2, 'Aman ', 'Australia','21','45000'), (3, 'Naveen', 'Sri lanka','24','40000'), (4, 'Aditya', 'Austria','21','35000'), (5, 'Nishant', 'Spain','22','25000'); Select * from Emp;>

Produktion:

img1

Detta program uppdaterar en tabell genom att öka lönen för varje anställd med 1500. Efter uppdateringen används SQL%ROWCOUNT-attributet för att ta reda på hur många rader som påverkades av operationen.

Fråga:

DECLARE total_rows number; BEGIN UPDATE Emp SET Salary = Salary + 1500; total_rows := SQL%ROWCOUNT; dbms_output.put_line(total_rows || ' rows updated.'); END;>

Produktion:

5 Emp selected PL/SQL procedure successfully completed.>

SQL-markörundantag

Närhelst vi kör en SQL-fråga finns det risk för ett fel som är oväntat. Markören går genom varje uppsättning rader för att returnera i en SQL-fråga.

Det finns några mycket populära undantag:

  1. Dubblettvärde: Denna typ av fel uppstår när markören försöker infoga en post eller tuppel som redan finns i databasen. dessa typer av fel kan undvikas genom att hantera korrekt felkonf
  2. Ogiltig markörstatus: Närhelst markören är i ett ogiltigt tillstånd kommer denna typ av fel att visas som ett fel.
  3. Timeout för låsning: Detta inträffar när markören försöker få ett lås på en rad eller tabell men låset hålls redan av en annan transaktion.

Behov av markör i en SQL-server

  1. Markörer tillåter oss att bearbeta data rad för rad, vilket kan vara användbart när vi behöver utföra komplexa beräkningar eller transformationer på data.
  2. Markörer tillåter oss att iterera över en resultatuppsättning flera gånger, vilket kan vara användbart när vi behöver utföra flera operationer på samma data.
  3. Markörer kan vara användbara när vi behöver sammanfoga flera tabeller med komplexa relationer, till exempel när vi bearbetar hierarkiska datastrukturer eller när vi utför rekursiva frågor.
  4. Markörer tillåter oss att utföra operationer som att uppdatera, ta bort eller infoga poster baserat på vissa villkor eller kriterier.
  5. Markörer är särskilt användbara när du bearbetar data från flera tabeller där relationerna inte är enkla.

SQL Server Cursor Begränsningar

Eftersom en markör har vissa begränsningar bör den endast användas när det inte finns något annat val. Dessa begränsningar inkluderar:

  1. Vid bearbetning av data införs låsningar på en delmängd eller hela tabellen.
  2. Markören uppdaterar tabellposter en rad i taget, vilket saktar ner dess prestanda.
  3. Medan loopar är långsammare än markörer har de mer overhead.
  4. En annan faktor som påverkar markörhastigheten är mängden rader och kolumner som förs in i markören.

Vanliga frågor:

F.1 Hur kan markörer undvikas?

Svar:

Markörernas primära funktion är rad-för-rad-tabellnavigering. Följande är några enkla metoder för att undvika markörer:

F.2 Hur använder jag medan loop i SQL-markören?

Svar:

Att använda en while-loop, som gör det möjligt att infoga en resultatuppsättning i den temporära tabellen, är det enklaste sättet att undvika behovet av en markör.

F.3 Vad är användardefinierade funktioner i SQL Cursor?

Svar:

Ibland beräknas den resulterande raduppsättningen med hjälp av markörer. Vi kan uppnå detta genom att använda en användardefinierad funktion som överensstämmer med specifikationerna.

F.4 Användning av Joins med SQL Cursor?

Svar:

I de fall där stora poster behöver bearbetas, minskar join antalet rader kod genom att endast bearbeta de kolumner som uppfyller det angivna villkoret.