Cursor y Tabla Temporal.
Publicado por Gabriel (1 intervención) el 18/01/2011 12:54:26
Buen día,
tengo un Procedimiento Almacenado en MySQL donde utilizo un cursor, el cual voy recorriendo y almacenando en una tabla temporal el resultado de una query.
Un ejemplo de uso sería, el cual no estoy seguro si es así:
CREATE PROCEDURE proc_para_probar()
BEGIN
-- Declaracion de Variables Locales
DECLARE campo1 SMALLINT(6);
DECLARE campo2 CHAR(1);
DECLARE campo3 DECIMAL(10,0);
DECLARE no_hay_mas_registros INT DEFAULT 0;
DECLARE elCursor CURSOR FOR
SELECT * FROM tabla WHERE fecha BETWEEN '2007-01-01' AND '2011-01-18';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_hay_mas_registros = 1;
-- Tabla Temporal
CREATE TEMPORARY TABLE TablaTemporal ( campo1 SMALLINT(6),
campo2 CHAR(1),
campo3 DECIMAL(10,0)
);
-- SE ABRE EL CURSOR
OPEN elCursor;
-- SE VAN TOMANDO LOS DATOS HASTA QUE EL CURSOR LLEGUE AL FINAL
bucle: LOOP
FETCH elCursor INTO campo1, campo2, campo3;
IF (no_hay_mas_registros=1) THEN
LEAVE bucle;
END IF;
-- SE CARGAN LOS DATOS EN LA Tabla Temporal
INSERT TablaTemporal(campo1, campo2, campo3)
VALUES(campo1, campo2, campo3);
END LOOP bucle;
CLOSE elCursor;
SELECT *
FROM TablaTemporal
ORDER BY campo1, campo2, campo3;
END$$
Deseo saber si es posible en MySQL utilizar ésta sintaxis ya que el procedimiento que utilizo no me devuelve ningún dato.
Muchas gracias.
tengo un Procedimiento Almacenado en MySQL donde utilizo un cursor, el cual voy recorriendo y almacenando en una tabla temporal el resultado de una query.
Un ejemplo de uso sería, el cual no estoy seguro si es así:
CREATE PROCEDURE proc_para_probar()
BEGIN
-- Declaracion de Variables Locales
DECLARE campo1 SMALLINT(6);
DECLARE campo2 CHAR(1);
DECLARE campo3 DECIMAL(10,0);
DECLARE no_hay_mas_registros INT DEFAULT 0;
DECLARE elCursor CURSOR FOR
SELECT * FROM tabla WHERE fecha BETWEEN '2007-01-01' AND '2011-01-18';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_hay_mas_registros = 1;
-- Tabla Temporal
CREATE TEMPORARY TABLE TablaTemporal ( campo1 SMALLINT(6),
campo2 CHAR(1),
campo3 DECIMAL(10,0)
);
-- SE ABRE EL CURSOR
OPEN elCursor;
-- SE VAN TOMANDO LOS DATOS HASTA QUE EL CURSOR LLEGUE AL FINAL
bucle: LOOP
FETCH elCursor INTO campo1, campo2, campo3;
IF (no_hay_mas_registros=1) THEN
LEAVE bucle;
END IF;
-- SE CARGAN LOS DATOS EN LA Tabla Temporal
INSERT TablaTemporal(campo1, campo2, campo3)
VALUES(campo1, campo2, campo3);
END LOOP bucle;
CLOSE elCursor;
SELECT *
FROM TablaTemporal
ORDER BY campo1, campo2, campo3;
END$$
Deseo saber si es posible en MySQL utilizar ésta sintaxis ya que el procedimiento que utilizo no me devuelve ningún dato.
Muchas gracias.
Valora esta pregunta


0