logo

Què és el cursor en SQL?

Cursor és una estació de treball temporal o memòria temporal. Està assignat per Base de dades Servidor en el moment de realitzar operacions DML (Llenguatge de manipulació de dades) a la taula per part de l'usuari. Els cursors s'utilitzen per emmagatzemar taules de bases de dades.

Hi ha 2 tipus de cursors: Cursors implícits i Cursors explícits. Aquestes s'expliquen a continuació.

  1. Cursors implícits: Els cursors implícits també es coneixen com a cursors per defecte d'SQL SERVER. Aquests Cursors són assignats per SQL SERVER quan l'usuari realitza operacions DML.
  2. Cursors explícits: Els cursors explícits són creats pels usuaris sempre que l'usuari els requereixi. Els cursors explícits s'utilitzen per obtenir dades de la taula de manera fila per fila.

Com crear un cursor explícit?

  1. Declarar l'objecte del cursor

Sintaxi:



DECLARE nom_cursor CURSOR FOR SELECT * FROM nom_taula

Consulta:

DECLARE s1 CURSOR FOR SELECT * FROM studDetails>

2. Obriu la connexió del cursor

java int a char

Sintaxi:

OBRE cursor_connection

Consulta:

OPEN s1>

Obteniu dades del cursor Hi ha un total de 6 mètodes per accedir a les dades des del cursor. Són els següents:

  1. PRIMER s'utilitza per obtenir només la primera fila de la taula del cursor.
  2. ÚLTIM s'utilitza per obtenir només l'última fila de la taula del cursor.
  3. PRÒXIM s'utilitza per obtenir dades en direcció cap endavant des de la taula del cursor.
  4. ANTERIOR s'utilitza per obtenir dades en direcció enrere des de la taula del cursor.
  5. ABSOLUT n s'utilitza per obtenir el n exactethfila de la taula del cursor.
  6. RELATIU n s'utilitza per obtenir les dades d'una manera incremental i també de manera decremental.

Sintaxi:

FETCH NEXT/FIRST/LAST/PRIOR/ABSOLUTE n/RELATIVE n FROM cursor_name

Consulta:

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>
  • Tanqueu la connexió del cursor

Sintaxi:

CLOSE cursor_name

Consulta:

CLOSE s1>
  • Desassignar la memòria del cursor

Sintaxi:

DEALLOCATE nom_cursor

Consulta:

DEALLOCATE s1>

Com crear un cursor implícit?

Un cursor implícit és un cursor que PL/SQL crea automàticament quan executeu una instrucció SQL. No cal declarar ni obrir un cursor implícit de manera explícita. En lloc d'això, PL/SQL gestiona el cursor darrere de les escenes.

Per crear un cursor implícit a PL/SQL, només cal que executeu una instrucció SQL. Per exemple, per recuperar totes les files de la taula EMP, podeu utilitzar el codi següent:

Consulta:

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

En PL/SQL, quan fem INSERT , ACTUALITZACIÓ o ELIMINAR operacions, es crea automàticament un cursor implícit. Aquest cursor conté les dades a inserir o identifica les files que s'han d'actualitzar o suprimir. Podeu referir-vos a aquest cursor com el cursor SQL al vostre codi. Aquest cursor SQL té diversos atributs útils.

  1. %FOUND és cert si l'operació SQL més recent ha afectat almenys una fila.
  2. %NOTFOUND és cert si no ha afectat cap fila.
  3. %ROWCOUNT retorna el nombre de files afectades.
  4. %ISOPEN comprova si el cursor està obert.

A més d'aquests atributs, %BULK_ROWCOUNT i %BULK_EXCEPTIONS són específics de la instrucció FORALL, que s'utilitza per realitzar diverses operacions DML alhora. %BULK_ROWCOUNT retorna el nombre de files afectades per cada operació DML, mentre que %BULK_EXCEPTION retorna qualsevol excepció que s'hagi produït durant les operacions.

Consulta:

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

Sortida:

img1

Aquest programa actualitza una taula augmentant el sou de cada empleat en 1500. Després de l'actualització, l'atribut SQL%ROWCOUNT s'utilitza per esbrinar quantes files es van veure afectades per l'operació.

Consulta:

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

Sortida:

5 Emp selected PL/SQL procedure successfully completed.>

Excepcions del cursor SQL

Sempre que executem una consulta SQL, hi ha la possibilitat d'un error inesperat. El cursor recorre cada conjunt de files per tornar en una consulta SQL.

Hi ha algunes excepcions molt populars:

  1. Valor duplicat: Aquest tipus d'error es produeix quan el cursor intenta inserir un registre o una tupla que ja existeix a la base de dades. aquest tipus d'errors es poden evitar gestionant correctament la conf
  2. Estat del cursor no vàlid: Sempre que el cursor estigui en un estat no vàlid, aquest tipus d'error es mostrarà com a error.
  3. Temps d'espera de bloqueig: Això passa quan el cursor intenta obtenir un bloqueig en una fila o taula, però el bloqueig ja està subjecte a una altra transacció.

Necessitat de Cursor en un servidor SQL

  1. Els cursors ens permeten processar les dades fila per fila, cosa que pot ser útil quan necessitem realitzar càlculs complexos o transformacions sobre les dades.
  2. Els cursors ens permeten iterar sobre un conjunt de resultats diverses vegades, cosa que pot ser útil quan necessitem realitzar diverses operacions sobre les mateixes dades.
  3. Els cursors poden ser útils quan necessitem unir diverses taules amb relacions complexes, com ara quan es processen estructures de dades jeràrquiques o quan es realitzen consultes recursives.
  4. Els cursors ens permeten realitzar operacions com ara actualitzar, esborrar o inserir registres en funció d'alguna condició o criteri.
  5. Els cursors són especialment útils quan es processen dades de diverses taules on les relacions no són senzilles.

Limitacions del cursor de SQL Server

Com que un cursor té algunes limitacions, només s'ha d'utilitzar quan no hi ha cap altra opció. Aquestes restriccions inclouen:

  1. Quan es processen les dades, imposa bloquejos a un subconjunt o a tota la taula.
  2. La taula d'actualitzacions del cursor registra una fila a la vegada, la qual cosa alenteix el seu rendiment.
  3. Tot i que els bucles són més lents que els cursors, tenen més sobrecàrrega.
  4. Un altre factor que influeix en la velocitat del cursor és la quantitat de files i columnes introduïdes al cursor.

Preguntes freqüents:

P.1 Com es poden evitar els cursors?

Resposta:

La funció principal dels cursors és la navegació per taula fila per fila. A continuació es mostren alguns mètodes senzills per evitar els cursors:

P.2 Com utilitzar el bucle While al cursor SQL?

Resposta:

L'ús d'un bucle while, que permet inserir un conjunt de resultats a la taula temporal, és la manera més senzilla d'evitar la necessitat d'un cursor.

P.3 Què són les funcions definides per l'usuari a SQL Cursor?

Resposta:

De vegades, el conjunt de files resultant es calcula mitjançant cursors. Ho podem aconseguir utilitzant una funció definida per l'usuari que compleixi les especificacions.

P.4 Ús d'unions amb el cursor SQL?

Resposta:

En els casos en què cal processar registres enormes, join redueix el nombre de línies de codi processant només aquelles columnes que compleixen la condició especificada.