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;