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

Problemas stored procedure

Estas en el tema de Problemas stored procedure en el foro de Mysql en Foros del Web. Buenas, Si ejecuto el siguiente procedimiento en phpmyadmin, con los parámetros 0,0,"", devuelve 152 registros. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original DROP PROCEDURE `totalPisosCases` ; ...
  #1 (permalink)  
Antiguo 31/08/2015, 15:57
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 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

Etiquetas: php, procedure, registro, select, sql, stored
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 04:32.