Ошибка в объявлении переменной mysql bigint внутри пользовательской функции nextval - PullRequest
1 голос
/ 09 ноября 2011

Я забыл указать директиву put delimiter, несколько точек с запятой и использовал синтаксис tsl, такой как [select variable = field], который недопустим в mysql.
Mysql ошибка при использовании синтаксиса tsl [не разрешено возвращать набор результатов из функции] и не очень помогает.
@AndreKR покажи мне все это, спасибо.
Я использую mysqlworkbench 5.2.30 CE. Работа функции становится:

delimiter //
CREATE FUNCTION nextval (seq_name varchar(100))  
  RETURNS bigint(20)  
    READS SQL DATA  
  NOT DETERMINISTIC  
    BEGIN  
     DECLARE workval bigint(20);  
     SELECT count(1) into workval  
        FROM tip_sequence  
        WHERE sequencename = seq_name;  
     IF workval <> 1 THEN  
        DELETE  
            FROM tip_sequence  
            WHERE sequencename = seq_name;  
        INSERT  
            INTO tip_sequence (sequencename, sequenceval, sequencestep)  
            VALUES (seq_name, 1, 1);  
     END IF;
     SELECT sequenceval into workval  
        FROM tip_sequence  
        WHERE sequencename = seq_name;  
     UPDATE tip_sequence  
        SET sequenceval = sequenceval + sequencestep  
        WHERE sequencename = seq_name;  
     RETURN workval;
    END//
delimiter ;

1 Ответ

0 голосов
/ 09 ноября 2011

Поскольку строка DECLARE workval bigint(20); является первой с точкой с запятой в конце, я подозреваю, что вы забыли изменить разделитель перед вводом кода функции (хотя это зависит от клиента, который вы используете).

Попробуйте изменить код на:

DELIMITER #
CREATE FUNCTION nextval (seq_name varchar(100))  

...

END#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...