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

ayuda aclarar sintaxis create function

Estas en el tema de ayuda aclarar sintaxis create function en el foro de Mysql en Foros del Web. Hola a todos Una vez más necesito de su ayuda. Quiero ejercitar en la creación de funciones en Mysql, tengo el siguiente ejemplo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 18/08/2009, 14:47
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
ayuda aclarar sintaxis create function

Hola a todos

Una vez más necesito de su ayuda. Quiero ejercitar en la creación de funciones en Mysql, tengo el siguiente ejemplo

Código MySql:
Ver original
  1. ((campo_datetime) - INTERVAL 240 DAY_MINUTE)

con este codigo se resta 240 minutos a un campo datetime. Pues bien lo que quiero es hacer una función que haga este trabajo de manera interna, que no se vea el codigo
Como quedaría el codigo de create functions????

Código MySql:
Ver original
  1. DELIMITER $$
  2.  
  3.     /*[DEFINER = { user | CURRENT_USER }]*/
  4.     FUNCTION `rrserver`.`Hora_Invierno_Chile`()
  5.     /*LANGUAGE SQL
  6.     | [NOT] DETERMINISTIC
  7.     | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  8.     | SQL SECURITY { DEFINER | INVOKER }
  9.     | COMMENT 'string'*/
  10.     BEGIN
  11.  
  12.     END$$
  13.  
  14. DELIMITER ;

Desde ya muchas gracia spor los aportes
  #2 (permalink)  
Antiguo 18/08/2009, 15:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda aclarar sintaxis create function

mira esta:

Código mysql:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE FUNCTION conversion(fecha_hora datetime) RETURNS datetime
  4.  DECLARE f_y_h datetime;    
  5.  
  6. set f_y_h = date_sub(fecha_hora, interval 240 day_minute);
  7. return f_y_h;
  8. END$$
  9. delimiter ;

y así:

Código mysql:
Ver original
  1. mysql> create table prueba_funcion(fecha datetime);
  2. Query OK, 0 rows affected (0.02 sec)
  3.  
  4. mysql> insert into prueba_funcion values(now());
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> select *from prueba_funcion;
  8. +---------------------+
  9. | fecha               |
  10. +---------------------+
  11. | 2009-08-18 16:39:30 |
  12. +---------------------+
  13. 1 row in set (0.00 sec)
  14.  
  15. mysql> select conversion(fecha) from prueba_funcion;
  16. +---------------------+
  17. | conversion(fecha)   |
  18. +---------------------+
  19. | 2009-08-18 12:39:30 |
  20. +---------------------+
  21. 1 row in set (0.00 sec)
  22.  
  23. mysql>

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/08/2009, 16:03
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: ayuda aclarar sintaxis create function

Ok huesos52

Muchas gracias, funciona bien, ahora si nos mucha la patudez me podrías explicar el codigo???

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. USE `rrserver`$$
  4.  
  5. DROP FUNCTION IF EXISTS `hora_invierno`$$
  6.  
  7. CREATE DEFINER=`root`@`%` FUNCTION `hora_invierno`(fecha_hora DATETIME) RETURNS DATETIME
  8. *\\ hasta  aquí  no hay  dramas
  9.  
  10. DECLARE f_y_h DATETIME;      
  11. SET f_y_h = DATE_SUB(fecha_hora, INTERVAL 240 DAY_MINUTE);
  12. RETURN f_y_h;
  13. END$$
  14.  
  15. DELIMITER ;

Como siempre muchas gracias
  #4 (permalink)  
Antiguo 18/08/2009, 16:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda aclarar sintaxis create function

Claro chelodelsur.

Debes declarar una variable tipo datetime para almacenar el nuevo valor.

La asignación debe ser con set asi:
SET f_y_h = DATE_SUB(fecha_hora, INTERVAL 240 DAY_MINUTE);

La función date_sub, resta fragmentos de tiempo a una fecha determinada. Fijate que le restamos 240 minutos a la fecha que entra como parámetro de entrada. Esta función retorna un datetime que se almacena en la variable declarada, para luego ser retornada.

espero haberme hecho entender.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 18/08/2009, 17:26
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: ayuda aclarar sintaxis create function

Me queda claro, muchas gracias

Ahora siguiendo con mis dudas, la función ha sido creada y almacenada en una de las bases de datos, ¿Se puede dejar almacenada en el host??, de tal forma que se puede utilizar con las demás BD, digo sin necesidad de crearla por separado en cada bd.

Saludos y como siempre agradecido de la buena voluntad que hay para ayudar
  #6 (permalink)  
Antiguo 18/08/2009, 18:21
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: ayuda aclarar sintaxis create function

No. Una stored function, como un stored procedure, se definen EN y pertenecen A una base de datos.
En todo caso lo que creo que puedes hacer (alguno me corregirá si me equivoco) es crear una UDF para el motor de MySQL, pero eso no se realiza a nivel de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/08/2009, 22:18
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda aclarar sintaxis create function

Yo la crearía en ua base de datos y la llamararía desde cualquiera anteponiendo el nombre de la base de datos donde fue creada.

No lo he probado pero creo que funciona.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 20:58.