Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Procedimiento almacenado; definir un select que contenga valores null y vacios

Estas en el tema de Procedimiento almacenado; definir un select que contenga valores null y vacios en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/05/2014, 04:59
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
Procedimiento almacenado; definir un select que contenga valores null y vacios

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 original
  1. IF ($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 original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`%` PROCEDURE `pa_03ge_02acci_05mod_02`( IN comunidad INT, IN USER INT,
  4. IN $a VARCHAR(50),
  5. IN $b VARCHAR(50),
  6. IN $c VARCHAR(50),
  7. IN $d VARCHAR(50),
  8. IN $e VARCHAR(50),
  9. IN $f VARCHAR(50),
  10. IN $g VARCHAR(50),
  11. IN $h VARCHAR(50),
  12. IN $j VARCHAR(50),
  13. IN $k datetime,
  14. IN $l datetime,
  15. IN $m VARCHAR(50))
  16.  
  17. #declaro VARIABLES post modificadas
  18.     DECLARE $a2 VARCHAR(50);
  19.     DECLARE $b2 VARCHAR(50);
  20.     DECLARE $c2 VARCHAR(50);
  21.     DECLARE $d2 VARCHAR(50);   
  22.     DECLARE $e2 VARCHAR(50);
  23.     DECLARE $f2 VARCHAR(50);
  24.     DECLARE $g2 VARCHAR(50);
  25.     DECLARE $h2 VARCHAR(50);
  26.     DECLARE $j2 VARCHAR(50);
  27.     DECLARE $k2 datetime;
  28.     DECLARE $l2 datetime;
  29.     DECLARE $m2 VARCHAR(50);
  30.  
  31. #declaro el cursor
  32. DECLARE cur1 CURSOR FOR
  33.  
  34. SELECT 080_acciones.id, 080_acciones.prioridad_id, 080_acciones.status_id,082_acc_status.STATUS, 080_acciones.contrato_id,
  35.     objetivo, origen, descripcion, 080_acciones.creador,
  36.     DATEDIFF( NOW( ) , fecha_fin ) AS retraso,080_acciones.fecha_creacion,080_acciones.fecha_inicio,080_acciones.fecha_fin,080_acciones.fecha_modif,
  37.     080_acciones.fecha_cierre,  080_acciones.modificador,080_acciones.ult_modif,080_acciones.cerrador,   030_comunidades.codigo, 030_comunidades.poblacion
  38.     FROM fincas4.080_acciones
  39.     LEFT JOIN fincas4.082_acc_status ON (080_acciones.status_id=082_acc_status.valor)
  40.     LEFT JOIN fincas4.001_contratos ON (080_acciones.contrato_id=001_contratos.id),
  41.     general2.050_auth
  42.     LEFT JOIN general2.030_comunidades ON (050_auth.contrato_id=030_comunidades.id)
  43.     WHERE 001_contratos.STATUS=1 AND 080_acciones.contrato_id=050_auth.contrato_id
  44.  
  45. AND 080_acciones.contrato_id=comunidad  AND 050_auth.user_id=USER
  46. AND   080_acciones.status_id LIKE $a2
  47. AND   080_acciones.prioridad_id LIKE $b2
  48. AND   080_acciones.objetivo LIKE $c2
  49. AND   080_acciones.origen LIKE $d2
  50. AND   080_acciones.fecha_inicio >= $e2
  51. AND   080_acciones.fecha_inicio <= $f2
  52. AND   080_acciones.fecha_fin >= $g2
  53. AND   080_acciones.fecha_fin <= $h2
  54. AND   080_acciones.creador LIKE $j2
  55. AND   080_acciones.fecha_creacion >= $k2
  56. AND   080_acciones.fecha_creacion <= $l2
  57. AND   080_acciones.cerrador LIKE $m2
  58. ORDER BY id DESC;
  59.  
  60.  
  61. #condicionales de post
  62. IF $a!='555' THEN SET  $a2=$a; ELSE SET $a2='2';END IF;
  63. IF $b!='555' THEN SET  $b2=$b; ELSE SET $b2='_%';END IF;
  64. IF $c!='555' THEN SET  $c2=$c; ELSE SET $c2='_%';END IF;
  65. IF $d!='555' THEN SET  $d2=$d; ELSE SET $d2='_%';END IF;
  66. IF $e!='555' THEN SET  $e2=$e; ELSE SET $e2='_%';END IF;
  67. IF $f!='555' THEN SET  $f2=$f; ELSE SET $f2='_%';END IF;
  68. IF $g!='555' THEN SET  $g2=$g; ELSE SET $g2='_%';END IF;
  69. IF $h!='555' THEN SET  $h2=$h; ELSE SET $h2='_%';END IF;
  70. IF $j!='555' THEN SET  $j2=$j; ELSE SET $j2='_%';END IF;
  71. IF $k!='555' THEN SET  $k2=$k; ELSE SET $k2='_%';END IF;
  72. IF $l!='555' THEN SET  $l2=$l; ELSE SET $l2='_%';END IF;
  73.  
  74. IF ($m!='555') THEN SET  $m2=$m; ELSE SET $m2='_%';END IF;

Última edición por gnzsoloyo; 28/05/2014 a las 06:09 Razón: Usar HIGHLIGHTs, por favor. Para eso están.

Etiquetas: almacenado, campo, definir, join, null, procedimiento, select, vacios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:21.