MySQL CREATE FUNCTION语法

mepcadol  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(90)

我正在尝试在MySQL中创建一个函数:
下面是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中运行这个create语句。这个功能有什么问题?

7fhtutme

7fhtutme1#

您必须使用类似$$的内容来覆盖;分隔符,以避免此类错误。
在函数定义之后,可以将分隔符设置回;
这应该可以工作:

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 ;
ve7v8dk2

ve7v8dk22#

MySQL create函数语法:

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

bjp0bcyl

bjp0bcyl3#

添加到the accepted answer中,为了完整起见,这里介绍了如何删除和调用函数,沿着删除中间变量的简化(尽管OP可能在函数中有更多的工作要做,只是试图让语法正常工作):

DROP FUNCTION IF EXISTS F_Dist3D;

DELIMITER $$
CREATE FUNCTION F_Dist3D (x1 decimal, y1 decimal) 
RETURNS decimal
DETERMINISTIC
BEGIN 
  RETURN SQRT(x1 - y1);
END$$
DELIMITER ;

SELECT F_Dist3D(11, 2); -- => 3

注意,这里的假设是x1大于y1,因为SQRT期望的是正数。

相关问题