2011-07-19 16 views
29

Estoy tratando de crear una función en MySQL:MySQL CREATE FUNCTION

Este es el código SQL:

CREATE FUNCTION F_Dist3D (x1 decimal, y1 decimal) 
RETURNS decimal 
DETERMINISTIC 
BEGIN 
DECLARE dist decimal; 
SET dist = SQRT(x1 - y1); 
RETURN dist; 
END; 

estoy consiguiendo el error siguiente:

#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 10 

soy ejecutando esta declaración de creación en phpMyAdmin. ¿Qué está mal con esta función?

Respuesta

54

Tiene que anular su delimitador ; con algo como $$ para evitar este tipo de error.

Después de la definición de su función, puede establecer de nuevo el delimitador en ;.

Esto debería funcionar:

DELIMITER $$ 
CREATE FUNCTION F_Dist3D (x1 decimal, y1 decimal) 
RETURNS decimal 
DETERMINISTIC 
BEGIN 
    DECLARE dist decimal; 
    SET dist = SQRT(x1 - y1); 
    RETURN dist; 
END$$ 
DELIMITER ; 
+0

Eso lo hizo. Pensé que usar phpMyAdmin eliminaría el hack de delimitadores. ¡Gracias! – Mel

+0

ejemplo 'DELIMITER $$' ' CREATE PROCEDURE mysql_user_count()' ' BEGIN' SELECT record_count 'Mysql tabla de usuario' descripción, COUNT (*) a partir de mysql.user;' ' FIN $$' ' DELIMITER ; ' –

+2

Sí, porque PHPMyAdmin es genial. Sugeriría usar HeidiSQL si vas a trabajar con funciones/procedimientos. –

13

MySQL crear función de sintaxis:

DELIMITER // 

CREATE FUNCTION GETFULLNAME(fname CHAR(250),lname CHAR(250)) 
    RETURNS CHAR(250) 
    BEGIN 
     DECLARE fullname CHAR(250); 
     SET fullname=CONCAT(fname,' ',lname); 
     RETURN fullname; 
    END // 

DELIMITER ; 

utilizar esta función en su consulta

SELECT a.*,GETFULLNAME(a.fname,a.lname) FROM namedbtbl as a 


SELECT GETFULLNAME("Biswarup","Adhikari") as myname; 

ver este video cómo crear la función de MySQL y cómo usar en tu consulta

Create Mysql Function Video Tutorial

+0

+1 Biswarup, parece que tienes algunos videos geniales. Tengo la sensación de que aprenderé mucho de ti. Gracias por poner los videos juntos. – Johnny

+0

Gracias @Johnny por su valioso comentario. – biswarupadhikari