【问题标题】:Error in mysql bigint variable declaration inside custom nextval function自定义 nextval 函数中的 mysql bigint 变量声明错误
【发布时间】:2011-11-08 23:51:42
【问题描述】:

我忘记了放置分隔符指令,一些分号,并且使用了 tsl 语法,例如 [select variable = field],这在 mysql 中无效。
使用 tsl 语法时的 Mysql 错误是 [不允许从函数返回结果集] 并且没有多大帮助。
@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 ;

【问题讨论】:

  • @Mitch Wheat 版本为【服务器版本:5.1.53-community MySQL Community Server (GPL)】

标签: mysql sql database tsql


【解决方案1】:

由于DECLARE workval bigint(20); 行是第一个以分号结尾的行,我怀疑您在输入函数代码之前忘记更改分隔符(尽管这取决于您使用的客户端)。

尝试将您的代码更改为:

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

...

END#

【讨论】:

  • 非常感谢,它解决了这个问题。我现在有一个新问题,并编辑了带有详细信息的问题。我也做了你指给我的更正。
  • 如果您还有其他问题,请打开一个新问题。 (我猜这个解决方案与“进入”这个词有关。)
  • 对不起,我尝试声明另一个变量传递值并返回但它不起作用,有详细的询问:stackoverflow.com/questions/8073404/…
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2018-02-04
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多