SQL - LIMIT con variables

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:LIMIT con variables

Publicado por Leopoldo Taylhardat (93 intervenciones) el 17/12/2009 03:01:42
Saludos...
Usa la función 'TOP n...'

SELECT TOP 5 *

FROM articulos
ORDER BY precio DESC


Esta funcíon existe en Sybase, debe existir en SqlServer ya que es un derivado de Sybase
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:LIMIT con variables

Publicado por Juan Manuel Castañeda (16 intervenciones) el 04/01/2010 23:18:54
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
DECLARE cur1 CURSOR FOR SELECT id,precio FROM articulos ORDER BY precio DESC LIMIT numero;
open cur1;
FETCH cur1 INTO iden,prercioincial;
WHILE NOT done DO
BEGIN
UPDATE articulos
SET articulos.precio = (SELECT FA_CalcularDescuento(precioinicial,porcentaje))
WHERE articulos.id = iden;
FETCH cur1 INTO iden,prercioincial;
END WHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar