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

Sintaxis función mysql

Estas en el tema de Sintaxis función mysql en el foro de Mysql en Foros del Web. Hola, tengo esta función: DROP FUNCTION IF EXISTS getDistance; CREATE FUNCTION getDistance( lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT ) RETURNS int BEGIN DECLARE ...
  #1 (permalink)  
Antiguo 05/11/2011, 04:41
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Sintaxis función mysql

Hola, tengo esta función:

DROP FUNCTION IF EXISTS getDistance;
CREATE FUNCTION getDistance( lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT ) RETURNS int
BEGIN
DECLARE pi, q1, q2, q3 FLOAT;
DECLARE rads FLOAT DEFAULT 0;
SET pi = PI();
SET lat1 = lat1 * pi / 180;
SET lon1 = lon1 * pi / 180;
SET lat2 = lat2 * pi / 180;
SET lon2 = lon2 * pi / 180;
SET q1 = COS(lon1-lon2);
SET q2 = COS(lat1-lat2);
SET q3 = COS(lat1+lat2);
SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) );
RETURN 6378.388 * rads;
END;

Y me tira el siguiente error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

¿Alguien me echa un cable? Gracias de antemano
  #2 (permalink)  
Antiguo 05/11/2011, 05:16
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, 5 meses
Puntos: 2658
Respuesta: Sintaxis función mysql

Devuelve la distancia en kilómetros:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP FUNCTION IF EXISTS `FN_DISTANCE` $$
  4. CREATE FUNCTION `FN_DISTANCE_SPHEROID`(LAT_OR FLOAT, LAT FLOAT, LNG_OR FLOAT, LNG FLOAT) RETURNS float
  5.   DECLARE DISTANCIA FLOAT;
  6.   SET DISTANCIA = (6378 * 2 * ASIN(SQRT(  POWER(SIN((LAT_OR - LAT) * PI()/180 / 2), 2) +
  7. COS(LAT_OR * PI()/180) *  COS(LAT * PI()/180) *  POWER(SIN((LNG_OR -LNG) * PI()/180 / 2), 2))));
  8.   RETURN DISTANCIA;
  9. END $$
  10.  
  11. DELIMITER ;
__________________
¿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 05/11/2011, 05:22
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Sintaxis función mysql

Me da el siguiente error, ¿a ti te funciona?

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$

DROP FUNCTION IF EXISTS `FN_DISTANCE` $$
CREATE FUNCTION `FN_D' at line 1
  #4 (permalink)  
Antiguo 05/11/2011, 07:24
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, 5 meses
Puntos: 2658
Respuesta: Sintaxis función mysql

Todo depende de qué estés usando para cargar ese SF...
DELIMITER se usa en consola de MySQL o bien en un script de carga directa. No se usa ni por programación ni con algunas aplicaciones, como phpMyadmin, Navicat o cosas así, porque estas lo implementan internamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/11/2011, 08:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Sintaxis función mysql

Efectivamente estoy utilizando phpMyAdmin. No soy capaz a hacerlo funcionar. He probado así pero me sigue dando error:


DROP FUNCTION IF EXISTS 'FN_DISTANCE';
CREATE FUNCTION 'FN_DISTANCE'(LAT_OR FLOAT, LAT FLOAT, LNG_OR FLOAT, LNG FLOAT) RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE DISTANCIA FLOAT;
SET DISTANCIA = (6378 * 2 * ASIN(SQRT( POWER(SIN((LAT_OR - LAT) * PI()/180 / 2), 2) +
COS(LAT_OR * PI()/180) * COS(LAT * PI()/180) * POWER(SIN((LNG_OR -LNG) * PI()/180 / 2), 2))));
RETURN DISTANCIA;
END;
  #6 (permalink)  
Antiguo 05/11/2011, 09:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Sintaxis función mysql

Ya lo conseguí, había que cambiar el delimitador en phpmyadmin.

Muchas gracias por la ayuda. Un saludo

Etiquetas: sintaxis, 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 18:46.