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

consulta sql no me retorna valor en sp

Estas en el tema de consulta sql no me retorna valor en sp en el foro de Mysql en Foros del Web. Hola tengo un problema Tengo un sp y dentro de el hago una consulta donde quiero recuperar un simple campo de tipo ENUM('0','1','2') donde guarda ...
  #1 (permalink)  
Antiguo 15/09/2012, 23:53
 
Fecha de Ingreso: enero-2012
Mensajes: 23
Antigüedad: 12 años, 3 meses
Puntos: 0
consulta sql no me retorna valor en sp

Hola tengo un problema
Tengo un sp y dentro de el hago una consulta donde quiero recuperar un simple campo de tipo ENUM('0','1','2') donde guarda 3 valores.
La cuestion es que cuando lo asigno a una variable no me lo almacena, no se porque y el asunto es que apartir de esa asignación en esa variable haré dos IF donde prácticamente se desarrolla todo el sp, mi codigo es este...
Código MySQL:
Ver original
  1. SET tipo_plnsuel_tblemp = (SELECT plnsuel FROM empleados WHERE idempleado = idemp);
  2.  
  3. IF tipo_plnsuel_tblemp = '1' THEN
  4.            .... CODIGO QUE NO PUEDO EJECUTAR PORQUE NO RECUPERO EL VALOR DEL CAMPO ENUM


el campo plnsuel es de tipo enum pero no puedo igualarlo en el IF ya probe con la funcion FIND_IN_SET pero nose que pasa que no me devuelve nada


Alguna idea de mi error aca?
  #2 (permalink)  
Antiguo 17/09/2012, 10:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: consulta sql no me retorna valor en sp

Hola javahierro:

En realidad no veo nada malo, pero como no incluiste el código que te trae problemas pues puedo suponer que ahí es justamente donde tienes el detalle...

Checa este script, estoy creando un SP que creo debe ser muy semejante a lo que tú tienes:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE `pruebas`.`sp_enum`(idemp INT)    
  3.   DECLARE tipo_plnsuel_tblemp VARCHAR(1);  -- enum ('0', '1', '2');
  4.   SET tipo_plnsuel_tblemp = (SELECT plnsuel
  5.                              FROM empleados WHERE  idempleado = idemp);
  6.   IF tipo_plnsuel_tblemp = '0' THEN
  7.     SELECT 'Regresa un cero';
  8.   ELSE
  9.     IF tipo_plnsuel_tblemp = '1' THEN
  10.       SELECT 'Regresa un uno';
  11.     END IF;        
  12.   END IF;
  13. END$$
  14.  
  15. DELIMITER ;

Primero tendrías que decirnos de qué tipo estás declarando tu variable:

Código:
DECLARE tipo_plnsuel_tblemp VARCHAR(1);  
DECLARE tipo_plnsuel_tblemp ENUM ('0', '1', '2');
......
Ahora checa la implementación:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE empleados(
  2.     ->    idempleado INT UNSIGNED NOT NULL ,
  3.     ->    plnsuel ENUM ('0','1','2'),
  4.     ->    PRIMARY KEY (`idempleado`)
  5.     -> );
  6. Query OK, 0 rows affected (0.53 sec)
  7.  
  8. mysql> INSERT INTO empleados VALUES
  9.     -> (10, '0'), (11, '1'), (12, '2');
  10. Query OK, 3 rows affected (0.06 sec)
  11. Records: 3  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> SELECT * FROM empleados;
  14. +------------+---------+
  15. | idempleado | plnsuel |
  16. +------------+---------+
  17. |         10 | 0       |
  18. |         11 | 1       |
  19. |         12 | 2       |
  20. +------------+---------+
  21. 3 rows in set (0.00 sec)

Observa lo que pasa cuando buscas el idempleado 11 o 12:

Código MySQL:
Ver original
  1. mysql> CALL sp_enum(10);
  2. +-----------------+
  3. | Regresa un cero |
  4. +-----------------+
  5. | Regresa un cero |
  6. +-----------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> CALL sp_enum(11);
  10. +----------------+
  11. | Regresa un uno |
  12. +----------------+
  13. | Regresa un uno |
  14. +----------------+
  15. 1 row in set (0.00 sec)

Es decir ESTÁ RECUPERANDO CORRECTAMENTE EL VALOR Y ESTÁ REGRESANDO EL MENSAJE QUE ESPECIFICASTE EN EL SP. Observa que en el SP sólo consideré los casos cuando el campo es 0 o 1... observa que pasa cuando busco el idEmp = 12:

Código MySQL:
Ver original
  1. mysql> CALL sp_enum(12);
  2. Query OK, 0 rows affected (0.00 sec)

NO REGRESA NADA, pues no se consideró en ninguno de los IF's.

Postea completo el código de tu SP y con gusto te ayudamos a revisar el error.

Saludos
Leo.
  #3 (permalink)  
Antiguo 17/09/2012, 14:06
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: consulta sql no me retorna valor en sp

Cita:
Tengo un sp y dentro de el hago una consulta donde quiero recuperar un simple campo de tipo ENUM('0','1','2') donde guarda 3 valores.
Creo que necesitas algunas aclaraciones.
- Un campo ENUM no guarda N valores. Guarda un único valor numérico que corresponde al indice de una lista predefinida de valores.
- La identificación del valor se hace por igulaldad con cada una de las entradas de la lista, o bien por su indice. Eso quiere decir que se hace una conversión entre la clave de la lista y su valor numérico, o bien se le puede asignar el numero entero que es su equivalente en la lista.
- Él indice de la lista es de base 1 no base cero.
- El indice cero se refiere a cadena erronea.
- No puedes obtener el listado de claves con una consulta.
Cita:
el campo plnsuel es de tipo enum pero no puedo igualarlo en el IF ya probe con la funcion FIND_IN_SET pero nose que pasa que no me devuelve nada
Porque lo que te devuelve la consulta no es un eENUM, sino la cadena del valor almacenado, o en su defecto el indice dado.
No puedes usar ENUM como tipo de variable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: enum, mysql-error
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 16:58.