2015-10-14 122 views
0

我必须在mysql中创建一个返回整数的函数。 sql解释器不断告诉我,我的语法有问题。我把它看得尽可能好,并尝试了一堆东西,但我无法弄清楚。麻烦mySql函数

CREATE FUNCTION no_of_paintings_exhibited (exhibition_name VARCHAR(45)) 
RETURNS INT 

BEGIN 
    DECLARE number_of_paintings INT; 

    SELECT 
    COUNT(*) 
    INTO number_of_paintings 
    FROM Exhibition, Shown_at, Painting 
    WHERE name = exhibition_name AND Painting.id_no = Shown_at.art; 

    RETURN number_of_paintings; 

END; // 

错误输出:

mysql> CREATE FUNCTION no_of_paintings_exhibited (exhibition_name VARCHAR(45)) 
-> RETURNS INT 
-> 
-> BEGIN 
->   DECLARE number_of_paintings INT; 

ERROR 1064 (42000): 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 5 
+0

请仔细试试这个'DECLARE number_of_paintings INT;设置number_of_paintings = 0; ' – makdu

+0

我尝试添加一个默认值并使用集合表达式。没有骰子:( – user3538411

+0

你可以检查'FROM Exhibition,Shown_at,Painting'语句 – makdu

回答

0
CREATE FUNCTION no_of_paintings_exhibited (exhibition_name VARCHAR(45)) 
RETURNS INT 

BEGIN 
    DECLARE number_of_paintings INT; 
set number_of_paintings=0; 
    SELECT 
    COUNT(*) 
    as number_of_paintings 
    FROM Exhibition ex, Shown_at shat, Painting ptng 
    WHERE ex.name = exhibition_name AND ptng.id_no = shat.art; 

    RETURN number_of_paintings; 

END; 
0

您收到此错误,因为你没有设置分隔符,默认情况下分号(;)是分隔符,一旦发现它尝试执行的第一个分号并引发此错误

执行如下操作(在创建函数之前将分隔符设置为$$或//,下面我使用$$),然后再次在函数创建后设置DELIMITER到sem我冒号。

DELIMITER $$ 
CREATE FUNCTION ... 
.. 
END; 
$$ 
DELIMITER ;