首页 > 解决方案 > 这个sql函数的正确版本是什么?

问题描述

生成新idas的正确方法是varchar什么?在这里,我正在尝试从 SQL Server 转换为 MySQL 数据库。

需要帮助。

我尝试了互联网,但它并没有解决我的问题。

--*GENERATES ANY ID WHEN NEED*
DELIMITER //

CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10)
BEGIN
    DECLARE lastvalue VARCHAR(10);
    DECLARE i INT;
    DECLARE newId VARCHAR(10);

    IF needTable = 'Item'
            SELECT lastvalue = MAX(resourceID) FROM Item;

            SELECT MAX(resourceID) INTO lastvalue FROM Item;

            IF IS NULL(lastvalue)
                SET lastvalue = 'I00000000';
                SET i = RIGHT(lastvalue,9) + 1;
                SET newId = 'S' + RIGHT('00000000'+CONVERT(VARCHAR(10),i),9);

            RETURN newId;
END; //

DELIMITER ;

SELECT getNewID ('Item');

DROP FUNCTION getNewID

错误说:

错误代码 1064,SQL 状态 42000
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'SELECT MAX(resourceID) INTO lastvalue FROM Item; 附近使用的正确语法;

IF IS NULL(lastval' at line 10
Line 3, column 1

0 秒后执行完成,发生 1 个错误。

标签: mysql

解决方案


试试这个

DELIMITER //

CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10)
BEGIN
    DECLARE lastvalue, newId VARCHAR(10);
    DECLARE i INT;

    SELECT MAX(resourceID) INTO lastvalue FROM Item where needTable = 'Item';

            IF(lastvalue IS NULL) THEN
                SET lastvalue = 'I00000000';
                SET i = RIGHT(lastvalue,9) + 1;
                SET newId = 'S' + RIGHT('00000000'+CONVERT(VARCHAR(10),i),9); -- what you are trying to do here?
                END IF;
-- what you need to return whenlastvalue is not null?
            RETURN newId;
END //

DELIMITER ;

推荐阅读