Estoy realizando un SP para un formulario, de tal modo que los valores del formulario se envían y son procesados por el procedimiento almacenado.
Dentro del formulario, hay un desplegable llamado "Cerrador" que contiene un primer valor llamado "Todos" (con valor '555'), y el resto de valores son distintos "cerradores" cuyos valores son tipo texto.
La idea es que cuando envían el valor '555' (Todos), el SP busque todos los valores en el campo '080_acciones.cerrador', pudiendo existir en el mismo valores 'null', vacios '', o con un nombre definido. Para ello he incluido la condición:
Código SQL:
Ver originalIF ($m!='555') THEN SET $m2=$m; ELSE SET $m2='_%';END IF;
siendo $m, la variable in enviada y $m2, el valor a buscar en el SELECT.
Dentro del SELECT se encuentra la expresion "WHERE 080_acciones.cerrador like $m2 ".
Cuando $Ms (cerrador enviado) es uno definido, todo va ok; el problema es cuando se envía '555' (Todos) y la segunda para del IF de arriba (
else SET $m2='_%';end if;) no obtiene TODOS los datos del campo '080_acciones.cerrador'.
Tengo dudas de si el enfoque que estoy realizando es el adecuado, o si podria hacerse de otro modo, por lo que agradecería comentarios.
PD; Adjunto parte del código del SP
Código SQL:
Ver originalDELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `pa_03ge_02acci_05mod_02`( IN comunidad INT, IN USER INT,
IN $a VARCHAR(50),
IN $b VARCHAR(50),
IN $c VARCHAR(50),
IN $d VARCHAR(50),
IN $e VARCHAR(50),
IN $f VARCHAR(50),
IN $g VARCHAR(50),
IN $h VARCHAR(50),
IN $j VARCHAR(50),
IN $k datetime,
IN $l datetime,
IN $m VARCHAR(50))
#declaro VARIABLES post modificadas
DECLARE $a2 VARCHAR(50);
DECLARE $b2 VARCHAR(50);
DECLARE $c2 VARCHAR(50);
DECLARE $d2 VARCHAR(50);
DECLARE $e2 VARCHAR(50);
DECLARE $f2 VARCHAR(50);
DECLARE $g2 VARCHAR(50);
DECLARE $h2 VARCHAR(50);
DECLARE $j2 VARCHAR(50);
DECLARE $k2 datetime;
DECLARE $l2 datetime;
DECLARE $m2 VARCHAR(50);
#declaro el cursor
DECLARE cur1 CURSOR FOR
SELECT 080_acciones.id, 080_acciones.prioridad_id, 080_acciones.status_id,082_acc_status.STATUS, 080_acciones.contrato_id,
objetivo, origen, descripcion, 080_acciones.creador,
DATEDIFF( NOW( ) , fecha_fin ) AS retraso,080_acciones.fecha_creacion,080_acciones.fecha_inicio,080_acciones.fecha_fin,080_acciones.fecha_modif,
080_acciones.fecha_cierre, 080_acciones.modificador,080_acciones.ult_modif,080_acciones.cerrador, 030_comunidades.codigo, 030_comunidades.poblacion
FROM fincas4.080_acciones
LEFT JOIN fincas4.082_acc_status ON (080_acciones.status_id=082_acc_status.valor)
LEFT JOIN fincas4.001_contratos ON (080_acciones.contrato_id=001_contratos.id),
general2.050_auth
LEFT JOIN general2.030_comunidades ON (050_auth.contrato_id=030_comunidades.id)
WHERE 001_contratos.STATUS=1 AND 080_acciones.contrato_id=050_auth.contrato_id
AND 080_acciones.contrato_id=comunidad AND 050_auth.user_id=USER
AND 080_acciones.status_id LIKE $a2
AND 080_acciones.prioridad_id LIKE $b2
AND 080_acciones.objetivo LIKE $c2
AND 080_acciones.origen LIKE $d2
AND 080_acciones.fecha_inicio >= $e2
AND 080_acciones.fecha_inicio <= $f2
AND 080_acciones.fecha_fin >= $g2
AND 080_acciones.fecha_fin <= $h2
AND 080_acciones.creador LIKE $j2
AND 080_acciones.fecha_creacion >= $k2
AND 080_acciones.fecha_creacion <= $l2
AND 080_acciones.cerrador LIKE $m2
ORDER BY id DESC;
#condicionales de post
IF $a!='555' THEN SET $a2=$a; ELSE SET $a2='2';END IF;
IF $b!='555' THEN SET $b2=$b; ELSE SET $b2='_%';END IF;
IF $c!='555' THEN SET $c2=$c; ELSE SET $c2='_%';END IF;
IF $d!='555' THEN SET $d2=$d; ELSE SET $d2='_%';END IF;
IF $e!='555' THEN SET $e2=$e; ELSE SET $e2='_%';END IF;
IF $f!='555' THEN SET $f2=$f; ELSE SET $f2='_%';END IF;
IF $g!='555' THEN SET $g2=$g; ELSE SET $g2='_%';END IF;
IF $h!='555' THEN SET $h2=$h; ELSE SET $h2='_%';END IF;
IF $j!='555' THEN SET $j2=$j; ELSE SET $j2='_%';END IF;
IF $k!='555' THEN SET $k2=$k; ELSE SET $k2='_%';END IF;
IF $l!='555' THEN SET $l2=$l; ELSE SET $l2='_%';END IF;
IF ($m!='555') THEN SET $m2=$m; ELSE SET $m2='_%';END IF;