Cursor con IF
Hola a Todos. Necesitaría si alguien me puede sugerir como poder crear una función que contenga un cursor el cual se llene con un select diferente en función de un parámetro. Los dos select va a ser iguales los que va a variar es el where del select, que va a cambiar en función de un parámetro.
Les dejo un ejemplo.
FUNCTION `function_stk_articulo_area`(aIdArt INT, aIdMedida INT, aNroMedida VARCHAR(20), aIdSuc INT, aIdDeposito INT, aIdArea INT) RETURNS decimal(10,3)
BEGIN
-- Definición de la consulta
DECLARE cursor_movimientos CURSOR FOR
IF aIdMedida = 0 THEN
SELECT
stkmovimientos.CantMovim,
stkconcep.SumRes,
stkconcep.DeCierre
FROM
stkmovimientos
INNER JOIN stkconcep ON
(stkmovimientos.IdConcepto = stkconcep.`Id`)
WHERE
stkmovimientos.IdSucursal = aIdSuc AND
stkmovimientos.IdDeposito = aIdDeposito AND
stkmovimientos.IdArea = aIdArea AND
stkmovimientos.IdTpoProducto = 0 AND
stkmovimientos.IdProducto = aIdArt
ORDER BY
stkmovimientos.IdSucursal,
stkmovimientos.IdDeposito,
stkmovimientos.IdArea,
stkmovimientos.FecMovim,
stkmovimientos.Id,
stkmovimientos.Sec;
ELSE
SELECT
stkmovimientos.CantMovim,
stkconcep.SumRes,
stkconcep.DeCierre
FROM
stkmovimientos
INNER JOIN stkconcep ON
(stkmovimientos.IdConcepto = stkconcep.`Id`)
WHERE
stkmovimientos.IdSucursal = aIdSuc AND
stkmovimientos.IdDeposito = aIdDeposito AND
stkmovimientos.IdArea = aIdArea AND
stkmovimientos.IdTpoProducto = 0 AND
stkmovimientos.IdProducto = aIdArt AND
stkmovimientos.IdMedida = aIdMedida AND
stkmovimientos.NroMedida = aNroMedia
ORDER BY
stkmovimientos.IdSucursal,
stkmovimientos.IdDeposito,
stkmovimientos.IdArea,
stkmovimientos.FecMovim,
stkmovimientos.IdMedida,
stkmovimientos.NroMedida,
stkmovimientos.Id,
stkmovimientos.Sec;
ENDIF;
Este es el ejemplo de lo que yo estoy tratando de lograr. Si alguien puede sugerirme como poder hacer esto o una alternativa diferente se los voy a agradecer.
Saludos