MySQL-列计数功能位置错误

时间:2020-04-13 11:53:15

标签: mysql function

我正在尝试创建一个返回值整数的函数

(基于称为BOOKCAT的表中的索引数量)

第一个即时通讯试图加载表格以确保其运行,但是,我一直收到错误消息,说分隔符不是有效位置

(这是我对函数的经验)

.Ref是用于识别预订中保留的猫ID数量的外键

此表的结果如下所示:

BOOKCAT
Ref CatID
'1', '1'
'2', '2'
'2', '3'
'3', '1'
'4', '2'
'5', '3'
'5', '4'
'6', '5'
'7', '6'
'7', '7'
'7', '8'
DELIMITER |
CREATE FUNCTION Calc(ReferenceNumber INTEGER)
RETURNS INTEGER
BEGIN 
DECLARE NUMCATS INTEGER;
    SELECT SUM(BOOKCAT.Ref = ReferenceNumber)
    FROM BOOKCAT;

    SET NUMCATS = SUM(BOOKCAT.Ref = ReferenceNumber);

    RETURN NUMCATS;
END|
DELIMITER;

1 个答案:

答案 0 :(得分:1)

如果没有选择,则set语句是错误的-它没有bookcat的概念。最简单的更改是选择并在定界符前加空格。另外,如果ref和catid是整数,则无需引用插入值。

drop table if exists t;
create table t(Ref int, CatID int);
insert into t values
(1,1),
(2,2),
(2,3),
(3,1),
(4,2),
(5,3),
(5,4),
(6,5),
(7,6),
(7,7),
(7,8);

drop function if exists f;
DELIMITER |
CREATE FUNCTION f(ReferenceNumber INTEGER)
RETURNS INTEGER
BEGIN 
DECLARE NUMCATS INTEGER;
    SELECT SUM(BOOKCAT.Ref = ReferenceNumber) into numcats
    FROM t bookcat;

    #SET NUMCATS = SUM(BOOKCAT.Ref = ReferenceNumber);

    RETURN NUMCATS;
END |
DELIMITER ;

select f(7);

+------+
| f(7) |
+------+
|    3 |
+------+
1 row in set (0.001 sec)