c2 cursores
Post on 18-Jan-2016
238 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
CURSORES
Administracin de Bases de Datos
Ing. Luis Reyes
-
DBD II - Ing. Luis Reyes
Que son los cursores?
Los cursores son una herramienta que
permite recorrer el resultado de una
consulta SQL y realizar operaciones
en cada paso de ella
-
DBD II - Ing. Luis Reyes
Caracteristicas
Se soportan cursores simples dentro de
procedimientos y funciones almacenadas.
La sintaxis es la de SQL empotrado.
Los cursores no son sensibles, son de slo
lectura, y no permiten scrolling. No sensible
significa que el servidor puede o no hacer
una copia de su tabla de resultados.
-
DBD II - Ing. Luis Reyes
Los cursores deben declararse antes de
declarar los HANDLERS, y las variables y
condiciones deben declararse antes de
declarar cursores HANDLERS.
Los cursores permiten recuperar las tuplas
resultantes de una consulta SELECT dentro
de un PROCEDIMIENTO ALMACENADO
-
DBD II - Ing. Luis Reyes
Sintaxis
Los cursores se declaran de la siguiente forma: declare cursor for
Para acceder al resultado de la consulta debemos primero abrir el cursor: open
-
DBD II - Ing. Luis Reyes
Sintaxis
Una vez abierto se puede recuperar cada
tupla mediante la siguiente sentencia: fetch into
[...,]
recupera la prxima tupla (si existe) utilizando el
cursor especificado y avanza el puntero a la
siguiente tupla.
Una vez utilizado podemos cerrar el cursor
mediante: close
-
DBD II - Ing. Luis Reyes
Declarar cursores
DECLARE cursor_name CURSOR
FOR select_statement
Este comando declara un cursor.
Pueden definirse varios cursores en
una rutina, pero cada cursor en un
bloque debe tener un nombre nico.
El comando SELECT no puede tener
una clusula INTO
-
DBD II - Ing. Luis Reyes
Sentencia de cursor OPEN
OPEN cursor_name
Este comando abre un cursor
declarado prviamente.
-
DBD II - Ing. Luis Reyes
Sentencia de cursor FETCH
FETCH cursor_name INTO var_name [, var_name] ...
Este comando trata el siguiente registro
(si existe) usando el cursor abierto que se especifique, y avanza el puntero del cursor.
Si no existen ms registros disponibles, ocurrir una condicin de Sin Datos con el valor SQLSTATE 02000. Puede configurar un manejador (handler)
-
DBD II - Ing. Luis Reyes
Sentencia de cursor CLOSE
CLOSE cursor_name
Este comando cierra un cursor abierto
previamente.
Si no se cierra explcitamente, un
cursor se cierra al final del comando
compuesto en que se declara.
-
DBD II - Ing. Luis Reyes
Ejemplo 1 CREATE PROCEDURE p25 (OUT return_val INT) BEGIN
DECLARE a,b INT; DECLARE cur_1 CURSOR FOR SELECT valor FROM t; DECLARE continue HANDLER FOR NOT FOUND SET b = 1; OPEN cur_1; REPEAT
FETCH cur_1 INTO a; UNTIL b = 1
END REPEAT; CLOSE cur_1; SET return_val = a;
END; //
-
DBD II - Ing. Luis Reyes
Ejemplo 2 ... CREATE PROCEDURE inc_saldo (IN monto DECIMAL(7,2)) # incrementa el saldo en el valor de monto,
# para aquellas cuentas cuyo saldo
-
DBD II - Ing. Luis Reyes
OPEN c; # abro el cursor (ejecuta la consulta asociada)
FETCH c INTO nro_cuenta; # recupero la primera fila en la variable
WHILE NOT fin DO
UPDATE cuentas # actualizo el saldo de la cuenta
SET saldo = saldo + monto;
WHERE numero = nro_cuenta;
FETCH c INTO nro_cuenta; # recupero la prxima fila en la variable
END WHILE;
CLOSE c; # cierro el cursor
END;
-
DBD II - Ing. Luis Reyes
Ejemplo 3 ...
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id, data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE continue HANDLER FOR SQLSTATE '02000' SET done =
1;
OPEN cur1;
OPEN cur2;
-
DBD II - Ing. Luis Reyes
REPEAT FETCH cur1 INTO a, b; FETCH cur2 INTO c; IF NOT done THEN IF b < c THEN INSERT INTO test.t3 VALUES (a,b); ELSE INSERT INTO test.t3 VALUES (a,c); END IF; END IF; UNTIL done END REPEAT; CLOSE cur1; CLOSE cur2; END
top related