MySQL - позиционные ошибки функции подсчета столбцов - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать функцию, которая возвращает целочисленное значение

(на основе количества индексов в таблице с именем BOOKCAT)

Сначала я пытаюсь загрузить таблицу, чтобы убедиться, что она работает, но я продолжаю получать сообщение о том, что разделитель не является допустимой позицией

(это мой опыт работы с функциями)

.Ref - это внешний ключ, используемый для определения количества идентификаторов кошек сохраненные в бронировании

результаты этой таблицы выглядят следующим образом:

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 Ответ

1 голос
/ 13 апреля 2020

Оператор 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...