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

MySQL Stored Procedure count(*)

Estas en el tema de MySQL Stored Procedure count(*) en el foro de Mysql en Foros del Web. Hola Estoy intentando crear el siguiente stored procedure pero siempre me devuelve el valor de 1 nunca me devuelve 0; espero que me puedan ayudar, ...
  #1 (permalink)  
Antiguo 13/04/2010, 17:38
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 2
MySQL Stored Procedure count(*)

Hola

Estoy intentando crear el siguiente stored procedure pero siempre me devuelve el valor de 1 nunca me devuelve 0; espero que me puedan ayudar, gracias.

CREATE DEFINER=`root`@`%` PROCEDURE `sp_usua_registrousuario`(in cusuario varchar(10)
BEGIN

declare num smallint;
select num=count(*) from usua_usuario where usua_usuario.cusuario=cusuario;
if (num=0 or num=null) then select '0';
else select '1';
end if;

END
  #2 (permalink)  
Antiguo 13/04/2010, 17:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: MySQL Stored Procedure count(*)

Al menos tres problemas:

1) NULL no se puede usar en MySQL como un valor de comparación porque NULL es un no-valor. Null es básicamente un puntero a la nada, y la nada no es un objeto, por lo que no se pueden usar operadores lógicos para verificarlo.
Debes usar IS NULL o IS NOT NULL (ver manual de referencia: Trabajar con valores NULL).

2) Los valores obtenidos de una función agregada como es el caso de COUNT(), no se asignan como si programases en VB. Se deben asignar usando INTO variable o haciendo uso de SET.

3) No se deben usar los mismos nombres para las variables que para los campos, tablas o bases porque se producen problemas de interpretación, ya que la jerarquía de los mismos es distinta y el parser prioriza las tablas sobre los campos y estos sobre las variables.

Código MySQL:
Ver original
  1. CREATE PROCEDURE `sp_usua_registrousuario`(IN usuario VARCHAR(10))
  2.     DECLARE  num SMALLINT;
  3.     SET num = (SELECT count(*) FROM usua_usuario WHERE  cusuario = usuario);
  4.     IF (num=0 OR num IS NULL) THEN
  5.         SELECT 0;
  6.     ELSE
  7.         SELECT 1;
  8.     END IF;
Tip final: No uses cadenas donde van números. Eso obliga a realizar conversiones implícitas innecesarias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/04/2010, 18:07
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 2
Respuesta: MySQL Stored Procedure count(*)

Funciono perfecto, gracias por la ayuda y las recomendaciones.

Etiquetas: count, procedure, 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:01.