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

Devuelve siempre lo mismo

Estas en el tema de Devuelve siempre lo mismo en el foro de Mysql en Foros del Web. Buenos dias compañeros del foro. tengo la siguiente funcion en mysql: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original delimiter // create function saludar ( ) returns ...
  #1 (permalink)  
Antiguo 31/05/2018, 08:21
 
Fecha de Ingreso: mayo-2013
Ubicación: bogota
Mensajes: 157
Antigüedad: 11 años, 6 meses
Puntos: 2
Devuelve siempre lo mismo

Buenos dias compañeros del foro.
tengo la siguiente funcion en mysql:

Código MySQL:
Ver original
  1. delimiter //
  2. SET s=(select id_servicio from empresa_servicios where nomb_servicio='lavanderia');
  3. if s!=0 then set b=1;
  4. else set b=0;
  5. return b;
  6. end //
y me devuelve siempre el resultado del else, es decir me devuelve 0 hallan o no hallan registros con servicio de lavanderia. y si cambio la condicion del if tambien me devuelve el resultado del else.
A que se debe este error, podrian ayudarme por favor?, gracias.
  #2 (permalink)  
Antiguo 04/06/2018, 10:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Devuelve siempre lo mismo

Hola Dacroma:

Creo que tu error está en los datos de tu tabla, ya que la función trabaja correctamente y aquí la prueba:

Primero, creamos la función

Código MySQL:
Ver original
  1. mysql> delimiter //
  2. mysql> create function saludar() returns INTEGER
  3.     -> begin
  4.     -> declare s INTEGER;
  5.     -> declare b INTEGER;
  6.     -> SET s=(select id_servicio from empresa_servicios where nomb_servicio='lavanderia');
  7.     -> if s!=0 then set b=1;
  8.     -> else set b=0;
  9.     -> end if;
  10.     -> return b;
  11.     -> end //
  12. Query OK, 0 rows affected (0.00 sec)
  13.  
  14. mysql> delimiter ;

Verificamos que no hay nada en la tabla empresa_servicios;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM empresa_servicios where nomb_servicio='lavanderia';
  2. Empty set (0.00 sec)

Si invocamos la función y no existen datos que cumplan la condición, entonces regresa un 0:

Código MySQL:
Ver original
  1. mysql> select saludar();
  2. +-----------+
  3. | saludar() |
  4. +-----------+
  5. |         0 |
  6. +-----------+
  7. 1 row in set (0.02 sec)

Ahora, insertamos un registro a la tabla que cumpla la condición:

Código MySQL:
Ver original
  1. mysql> insert into empresa_servicios values (1, 'lavanderia');
  2. Query OK, 1 row affected (0.06 sec)
  3.  
  4. mysql> SELECT * FROM empresa_servicios where nomb_servicio='lavanderia';
  5. +-------------+---------------+
  6. | id_servicio | nomb_servicio |
  7. +-------------+---------------+
  8. |           1 | lavanderia    |
  9. +-------------+---------------+
  10. 1 row in set (0.00 sec)

ahora, si volvemos a invocar la función, nos regresa un 1:

Código MySQL:
Ver original
  1. mysql> select saludar();
  2. +-----------+
  3. | saludar() |
  4. +-----------+
  5. |         1 |
  6. +-----------+
  7. 1 row in set (0.00 sec)

Ojo, revisa bien cómo tienes tu información almacenada: no es lo mismo lavandería, que lavanderia, que Lavandería, y que LAVANDERIA. En decir, debes de cuidad acentos, mayúsculas y minúsculas e incluso si tienen espacios en blanco o no.

Haz la prueba y nos comentas.

Saludos
Leo.

Etiquetas: devuelve, siempre, sql
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 11:37.