简体   繁体   English

创建函数时出现mysql语法错误

[英]mysql syntax error in creating function

DROP FUNCTION IF EXISTS bramkiStracone;

CREATE FUNCTION bramkiStracone(idDruzyny INT)
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE bramek INT;
DECLARE tmp1 INT;
DECLARE tmp2 INT;

SELECT DISTINCT COALESCE(SUM( b.bramki ), 0) INTO tmp1
FROM LigaBramki b
INNER JOIN LigaZawodnicy z ON b.idZawodnika = z.idZawodnika
INNER JOIN LigaDruzyny d ON z.idDruzyny = d.idDruzyny
INNER JOIN LigaMecze m ON b.idMeczu = m.idMeczu
WHERE m.idDruzyny2 = idDruzyny
AND z.idDruzyny != idDruzyny
AND d.idDruzyny != idDruzyny
AND m.rozegrany = '1';

SELECT DISTINCT COALESCE(SUM( b.bramki ), 0) INTO tmp2
FROM LigaBramki b
INNER JOIN LigaZawodnicy z ON b.idZawodnika = z.idZawodnika
INNER JOIN LigaDruzyny d ON z.idDruzyny = d.idDruzyny
INNER JOIN LigaMecze m ON b.idMeczu = m.idMeczu
WHERE m.idDruzyny1 = idDruzyny
AND z.idDruzyny != idDruzyny
AND d.idDruzyny != idDruzyny
AND m.rozegrany = '1';

SET bramek = tmp1 + tmp2;

RETURN bramek;
END

I have error near DECLARE bramek INT; 我在DECLARE bramek INT;附近有错误DECLARE bramek INT; but don't know what am i missing, 但不知道我错过了什么,
i tried to make it work by removing semi-colons but that didn't work either. 我试图通过删除分号来使其工作,但这也不起作用。

after i added delimiter i still have error 在我添加分隔符后,我仍然有错误

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 |
CREATE FUNCTION bramkiStracone(idDruzyny INT)
RETURNS int(11)
DET' at line 1 

dont forget to change the default DELIMITER so the query won't terminate at DECLARE bramek INT; 别忘了更改默认的DELIMITER这样查询就不会在DECLARE bramek INT;处终止DECLARE bramek INT;

DROP FUNCTION IF EXISTS bramkiStracone;

DELIMITER $$

CREATE FUNCTION bramkiStracone(idDruzyny INT)
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE bramek INT;
DECLARE tmp1 INT;
DECLARE tmp2 INT;

SELECT DISTINCT COALESCE(SUM( b.bramki ), 0) INTO tmp1
FROM LigaBramki b
INNER JOIN LigaZawodnicy z ON b.idZawodnika = z.idZawodnika
INNER JOIN LigaDruzyny d ON z.idDruzyny = d.idDruzyny
INNER JOIN LigaMecze m ON b.idMeczu = m.idMeczu
WHERE m.idDruzyny2 = idDruzyny
AND z.idDruzyny != idDruzyny
AND d.idDruzyny != idDruzyny
AND m.rozegrany = '1';

SELECT DISTINCT COALESCE(SUM( b.bramki ), 0) INTO tmp2
FROM LigaBramki b
INNER JOIN LigaZawodnicy z ON b.idZawodnika = z.idZawodnika
INNER JOIN LigaDruzyny d ON z.idDruzyny = d.idDruzyny
INNER JOIN LigaMecze m ON b.idMeczu = m.idMeczu
WHERE m.idDruzyny1 = idDruzyny
AND z.idDruzyny != idDruzyny
AND d.idDruzyny != idDruzyny
AND m.rozegrany = '1';

SET bramek = tmp1 + tmp2;

RETURN bramek;
END $$

DELIMITER ;

You need to change your client's statement delimiter, so that it doesn't think each ; 您需要更改客户端的语句分隔符,以便它不会考虑每个分隔符; terminates the entire CREATE FUNCTION statement. 终止整个CREATE FUNCTION语句。

In the MySQL command line client, one can use the delimiter command: 在MySQL命令行客户端中,可以使用delimiter命令:

delimiter ;;

CREATE FUNCTION ...  ;;

delimiter ;

Read the manual on Defining Stored Programs . 阅读定义存储程序的手册。

Make sure you set the delimiter to something other than semicolon before you declare your function: 在声明函数之前,请确保将分隔符设置为分号以外的分隔符:

DELIMITER |
CREATE FUNCTION bramkiStracone(idDruzyny INT)
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE bramek INT;
...
END|

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM