Què és un cursor?

Un cursor permet accedir en temps real a les dades de cada fila d'una consulta. Aquest mecanisme és de gran utilitat quan anem a comunicar MySQL amb aplicatius o realitzar consultes complexes.

Declaració

DECLARE cursor_name CURSOR FOR select_statement

Exemple:

DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;

Sentència OPEN

Aquesta comanda obre un cursor declarat prèviament.

Sintaxi: OPEN cursor_name

Exemple: OPEN cur1;

Sentència FETCH

La lectura dels resultats d'un cursor es fa amb la comanda FETCH. Aquesta ens permet accedir a la primera fila generada per la consulta. Si es torna a utilitzar, el cursor passa a apuntar a la segona fila, després a la tercera i així successivament fins que el cursor no tingui resultats per referenciar.

Incloure la comanda FETCH dins d'un bucle permet llegir tots els resultats d'un cursor. Quan el cursor arribi al final dels resultats de la consulta, aleshores el bucle acaba. Però acabar un bucle d'aquest tipus necessita una condició d'aturada especial en MySQL.

Sintaxi:

FETCH cursor_name INTO var_name [, var_name] ...

Exemple:

FETCH cur1 INTO a, b; on DECLARE a CHAR(16); DECLARE b,c INT

Sentència CLOSE

Un cop llegits tots els resultats del cursor, procedim a tancar i netejar espais de memòria amb CLOSE.

Sintaxi:

CLOSE nom_cursor;

Exemple:

CLOSE cur1; Exemple

BEGIN DECLARE variable TIPUSVARIABLE; DECLARE error INT DEFAULT 0; DECLARE cursor1 cursor for SELECT X FROM Y; DECLARE CONTINUE handler for sqlstate '02000' set error = 1;

open cursor1;

repeat fetch cursor1 into variable; if not error then [FER ALGUNA COSA] end if; until error end repeat;