LIMIT con variables
Publicado por jorge (1 intervención) el 15/12/2009 20:16:25
Hola
Estoy haciendo un procedimiento en MySQL que , partiendo de una serie de articulos, coja los n articulos más caros y les aplique un descuento. He conseguido que funcione para el más caro usando limit, pero si le paso una variable a limit me da error de sintaxis.
DELIMITER $$
DROP PROCEDURE IF EXISTS `PA_articulosCaros` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `PA_articulosCaros`(numero INT, porcentaje INT)
BEGIN
DECLARE precioInicial REAL;
DECLARE iden INT;
DECLARE contador INT DEFAULT 1;
DECLARE precioFinal REAL;
REPEAT
SELECT articulos.precio INTO precioInicial FROM articulos ORDER BY precio DESC LIMIT 1;
SELECT articulos.id INTO iden FROM articulos ORDER BY precio DESC LIMIT 1;
SELECT FA_calcularDescuento(precioInicial, porcentaje) INTO precioFinal;
UPDATE articulos
SET articulos.precio = precioFinal
WHERE articulos.id = iden;
SET contador = contador + 1;
UNTIL numero > contador
END REPEAT;
SELECT * FROM articulos;
END $$
DELIMITER ;
La idea es que, en vez de pasarle a limit 1, se haga "LIMIT contador, 1" para que asi vaya cogiendo el n artículo más caro cada vez.
Estoy haciendo un procedimiento en MySQL que , partiendo de una serie de articulos, coja los n articulos más caros y les aplique un descuento. He conseguido que funcione para el más caro usando limit, pero si le paso una variable a limit me da error de sintaxis.
DELIMITER $$
DROP PROCEDURE IF EXISTS `PA_articulosCaros` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `PA_articulosCaros`(numero INT, porcentaje INT)
BEGIN
DECLARE precioInicial REAL;
DECLARE iden INT;
DECLARE contador INT DEFAULT 1;
DECLARE precioFinal REAL;
REPEAT
SELECT articulos.precio INTO precioInicial FROM articulos ORDER BY precio DESC LIMIT 1;
SELECT articulos.id INTO iden FROM articulos ORDER BY precio DESC LIMIT 1;
SELECT FA_calcularDescuento(precioInicial, porcentaje) INTO precioFinal;
UPDATE articulos
SET articulos.precio = precioFinal
WHERE articulos.id = iden;
SET contador = contador + 1;
UNTIL numero > contador
END REPEAT;
SELECT * FROM articulos;
END $$
DELIMITER ;
La idea es que, en vez de pasarle a limit 1, se haga "LIMIT contador, 1" para que asi vaya cogiendo el n artículo más caro cada vez.
Valora esta pregunta


0