Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/08/2015, 15:57
mblascog
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 23 años, 2 meses
Puntos: 4
Problemas stored procedure

Buenas,
Si ejecuto el siguiente procedimiento en phpmyadmin, con los parámetros 0,0,"", devuelve 152 registros.
Código MySQL:
Ver original
  1. DROP PROCEDURE `totalPisosCases`;
  2. CREATE DEFINER=`root`@`localhost` PROCEDURE `totalPisosCases`(OUT `regs` INT, IN `op` INT, IN `ob` INT, IN `barris` TEXT) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN
  3.     SET @query = "SELECT COUNT(*) INTO @regs FROM t_un WHERE (t_un.familia = 3 OR t_un.familia = 4)";
  4.     IF op = 1 THEN
  5.         SET @query = CONCAT(@query, " AND t_un.operacion = 4");    
  6.     END IF;
  7.     IF op = 2 THEN
  8.         SET @query = CONCAT(@query, " AND t_un.operacion = 3");
  9.     END IF;
  10.     IF ob = 1 THEN
  11.         SET @query = CONCAT(@query, " AND (t_un.referencia < 7000 OR t_un.referencia > 9999)");
  12.     END IF;
  13.     IF ob = 2 THEN
  14.         SET @query = CONCAT(@query, " AND t_un.referencia >= 7000 AND t_un.referencia <= 9999");
  15.     END IF;
  16.     IF barris != "" THEN
  17.         SET @query = CONCAT(@query, barris);
  18.     END IF;
  19.     PREPARE stmt FROM @query;
  20.     EXECUTE stmt;
  21.     DEALLOCATE PREPARE stmt;  
  22.     SET regs = @regs;

Y si hago la llamada desde PHP, no devuelve nada:
Código PHP:
Ver original
  1. $rCall = mysql_query("CALL totalPisosCases(@total, $pr1, $pr2, $pr4)");
  2.     $rRet = mysql_query("SELECT @total");
  3.     $row = mysql_fetch_row($rRet);
  4.     echo $row[0];
Dónde $pr1 = $pr2 = 0 y $pr4 = ""

Si modifico el procedimiento eliminando el último parámetro (barris), devuelve los 152 registros.
Este último parámetro puede estar vacío o bien contener, por ejemplo " AND (CodigoPostal = 99999 OR CodigoPostal = 88888). Puede ser un sólo código postal, ninguno, cuatro, ....

He añadido un parámetro de salida para visualizar como queda la variable @query y su sintaxis es correcta. Algo tiene que haber, que desconozco, en la forma de pasar el último parámetro.
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Última edición por mblascog; 01/09/2015 a las 05:46