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

[SOLUCIONADO] Stored procedure devuelve null

Estas en el tema de Stored procedure devuelve null en el foro de Mysql en Foros del Web. Buenas, He creado el siguiente stored procedure. Al ejecutarlo devuelve null y no debería. He comprobado la sentencia mysql que contiene @query y devuelve el ...
  #1 (permalink)  
Antiguo 09/08/2015, 15:36
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Stored procedure devuelve null

Buenas,
He creado el siguiente stored procedure. Al ejecutarlo devuelve null y no debería.
He comprobado la sentencia mysql que contiene @query y devuelve el valor correcto Para comprobarlo he añadido un parámetro string de salida y he grabado @query.
Si no almaceno el resultado en el parámetro de salida, funciona correctamente también, pero luego no sé cómo recuperar dicho valor desde php, es decir:

Código MySQL:
Ver original
  1. SET @query = "SELECT COUNT(*) FROM t_un, t_familia WHERE t_un.familia = t_familia.id_familia AND (t_un.familia = '3' OR t_un.familia = '4')";
Gracias.


Código MySQL:
Ver original
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `totalPisosCases`(OUT `regs` INT, IN `op` INT, IN `ob` INT)
  2.     SET @query = "SELECT COUNT(*) INTO regs FROM t_un, t_familia WHERE t_un.familia = t_familia.id_familia AND (t_un.familia = '3' OR t_un.familia = '4')";
  3.     IF op = 1 THEN
  4.         SET @query = CONCAT(@query, " AND t_un.operacion = '4'");      
  5.     END IF;
  6.     IF op = 2 THEN
  7.         SET @query = CONCAT(@query, " AND t_un.operacion = '3'");
  8.     END IF;
  9.     IF ob = 1 THEN
  10.         SET @query = CONCAT(@query, " AND (t_un.referencia < '7000' OR t_un.referencia > '9999')");
  11.     END IF;
  12.     IF ob = 2 THEN
  13.         SET @query = CONCAT(@query, " AND t_un.referencia >= '7000' AND t_un.referencia <= '9999'");
  14.     END IF;
  15.    
  16.     PREPARE stmt FROM @query;
  17.     EXECUTE stmt;
  18.     DEALLOCATE PREPARE stmt;
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Última edición por mblascog; 10/08/2015 a las 01:42
  #2 (permalink)  
Antiguo 10/08/2015, 04:37
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Respuesta: Stored procedure devuelve null

Buenas,
Por si alguien tiene el mismo problema que yo, se soluciona usando una variable local en el select en lugar del parámetro de salida. Una vez ejecutado el procedimiento se asigna el valor de dicha variable al parámetro de salida.
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #3 (permalink)  
Antiguo 10/08/2015, 05:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Stored procedure devuelve null

Si, siempre y cuando el resultado sea un valor único, porque recuerda que en MySQL no existen los datos de tipo ROW, TABLE o RECORD, como en otros DBMS.
En caso de devolver un registro o una tabla de resultados, deberás usar tablas TEMPORARY.

Por otro lado, ten en cuenta que las comillas (") deben estar configuradas para ser delimitadores de cadenas de texto como los apóstrofos (') a nivel servidor de MySQL, de lo contrario funcionan como delimitadores de nombres de objetos, igual que los acentos agudos (´), lo que te puede generar errores inesperados.

Es preferible que uses los apostrofes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 10/08/2015, 06:06
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Respuesta: Stored procedure devuelve null

Muchas gracias por esta información
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Etiquetas: devuelve, null, procedure, 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 12:29.