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

problemas con función

Estas en el tema de problemas con función en el foro de Mysql en Foros del Web. Uso la versión 5.1 y estoy tratando de crear una función. Tras varias pruebas no lo consigo así que pruebo con los ejemplos de la ...
  #1 (permalink)  
Antiguo 30/03/2008, 04:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 0
problemas con función

Uso la versión 5.1 y estoy tratando de crear una función. Tras varias pruebas no lo consigo así que pruebo con los ejemplos de la documentación http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html y no puedo crear ni la función ni el procedimiento de la función. Obtengo el siguiente error al crear el procedure ERROR 1607 (HY000): Cannot create stored routine `simpleproc`. Check warnings

¿alguna idea de que puede fallar? yo ya no sé por donde seguir ¿cómo podría ver los warnings? en la documentación no encontré nada y quizás de ahí saque información
  #2 (permalink)  
Antiguo 30/03/2008, 06:40
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: problemas con función

ya me han comentado en otro lugar como ver los warnings. El warning es:

Warning | 1265 | Data truncated for column 'sql_mode' at row 0

alguna idea de como seguir adelante?
  #3 (permalink)  
Antiguo 30/03/2008, 08:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: problemas con función

tengo estos valores en la variable

mysql> select @sql_mode
-> ;
+-----------+
| @sql_mode |
+-----------+
| NULL |
+-----------+
1 row in set (0.05 sec)

mysql> select @@sql_mode
-> ;
+----------------------------------------------------------------+
| @@sql_mode |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_ SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

y no encuentro en la documentación ningún sitio que me indique que deba cambiarlas o que deban valer

agradecería cualquier orientación al respecto

gracias por adelantado
  #4 (permalink)  
Antiguo 30/03/2008, 10:31
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
Re: problemas con función

¿Puedes pasar el código completo de la función?
En principio, lo de "data truncated" está indicando que un dato ingresado o procesado no cumple con la longitud definida para ese tipo de dato, pero eso puede ser un dato entrante o un dato obtenido.
Ten en cuenta un par de cosas:
1. Una función es un procedimiento en el que todos los parámetros son de entrada, y que devuelve, por definición, un solo valor. Jamás devuelve un registro a menos que el registro tenga un sólo campo y ese campo sea el valor devuelto.
2. Una función debe tener definido el tipo de dato que devolverá, y el tipo de datos devuelto en el proceso debe forzosamente ser del mismo tipo.
3. Si la función leerá o escribirá datos DML (INSERT, UPDATE, DELETE, REPLACE) debe ir, previo al BEGIN de la función una línea indicando READS SQL DATA o WRITES SQL DATA.
4. Hay que tener cuidado en el tipo de datos manipulado, para que la longitud de los datos entrantes se corresponda con los tipos de datos esperados. Eso es importante por cuanto si, por ejemplo, intentas ingresar como parámetro un DATETIME en un CHAR, en principio lo tomará, haciendo la conversión. Pero si el CHAR de la función es de 8 caracteres (CHAR(8)), el dato se truncará, ya que DATETIME tiene 19 ('0000-00-00 00:00:00', incluyendo el espacio entre fecha y hora: 19 caracteres)
  #5 (permalink)  
Antiguo 30/03/2008, 11:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: problemas con función

Hola, gracias por tu respuesta, la función es esta

DELIMITER $$

DROP FUNCTION IF EXISTS `pcligamercado`.`me11_de_equipo` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `me11_de_equipo`(nom_equipo varchar(32)) RETURNS double
begin
declare param1 double;
select avg(me) into param1
from (select round( me ,2) as me
from `pcligamercado`.`jugador`
where nombreequipo = nom_equipo
order by me desc
limit 0,11) t1;
return param1;
end $$

DELIMITER ;

ya he conseguido que funcione, para ello hice set sql_mode = ''; y con eso conseguí guardar la función y ya puedo ejecutarla
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 21:41.