2011-07-19 106 views
29

我想在MySQL中创建一个函数:MySQL的CREATE FUNCTION语法

下面是SQL代码:

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

我收到以下错误:

#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 

我在phpMyAdmin中运行这个创建语句。这个功能有什么问题?

回答

54

你必须覆盖你的;分隔符,如$$,以避免这种错误。

在您的函数定义之后,您可以将分隔符设置回;

这应该工作:

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

这样做。我认为使用phpMyAdmin会消除分隔符的破解。谢谢! – Mel

+0

例如 'DELIMITER $$'' CREATE PROCEDURE mysql_user_count()'' BEGIN' 'SELECT 'MySQL用户表' 的说明中,COUNT(*)FROM record_count mysql.user;'' END $$'' DELIMITER ;' –

+2

是的,因为PHPMyAdmin太棒了。如果你打算使用函数/程序,我会建议使用HeidiSQL。 –

13

的MySQL创建函数语法:

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 ; 

使用此功能在查询

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


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

观看此视频,如何创建MySQL的函数以及如何在您的查询中使用

Create Mysql Function Video Tutorial

+0

+1 Biswarup,看起来像你有一些很棒的视频。我有一种感觉,我会从你身上学到很多东西。感谢您投放视频。 – Johnny

+0

感谢@Johnny的宝贵意见。 – biswarupadhikari