【发布时间】:2018-12-16 18:14:48
【问题描述】:
正如我在下面的问题标题中提到的,Mysql 函数总是返回 null:
CREATE DEFINER=`root`@`localhost` FUNCTION `nextCode`(tbl_name VARCHAR(30), prv_code VARCHAR(30)) RETURNS varchar(30) CHARSET utf8
READS SQL DATA
BEGIN
DECLARE nxtCode VARCHAR(30);
SELECT ds.prefix, ds.suffix, ds.is_used, ds.next_number, CHAR_LENGTH(ds.pattern)
INTO @prefix, @suffix, @isUsed, @nxtNum, @pLength
FROM ths_inventory.doc_sequnce ds WHERE ds.`table_name` = tbl_name;
SET nxtCode = CONCAT(@prefix, LPAD((CASE WHEN @isUsed
THEN
(ExtractNumber(prv_code) + 1)
ELSE
(@nxtNum)
END
), @pLength,'0'), @suffix);
RETURN nxtCode;
END
但是一旦我改变了下面的行:
CONCAT(@prefix, LPAD((CASE WHEN @isUsed
THEN
(ExtractNumber(prv_code) + 1)
ELSE
(@nxtNum)
END
), @pLength,'0'), @suffix)
到下面的一些静态值:
CONCAT('PR', LPAD((CASE WHEN true
THEN
(ExtractNumber(prv_code) + 1)
ELSE
(5)
END
), 6,'0'), '')
函数开始相应地返回值。
这是我调用函数的方式:
nextCode('item','PR000002');
更新:
我定义了这个函数来获取项目表的下一个可能的代码:
根据我的要求,下一个可能的代码应该是PR000000005。
但是我总是得到空结果,而不是得到它。
SELECT nextCode('item',(SELECT `code` FROM item ORDER BY id DESC LIMIT 1)) AS next_code;
任何帮助都将不胜感激。
【问题讨论】:
-
可以参考链接:stackoverflow.com/questions/2754423/… 和Prepared SQL statements 语法:dev.mysql.com/doc/refman/8.0/en/…
-
我不认为extractnumber是mysql函数你确定你用的是mysql吗?
-
@P.Salmon,我正在使用这个自定义函数。 stackoverflow.com/a/37269038/5454585
-
你查看
doc_sequnce的内容了吗?也许您那里没有item的条目,或者那里没有任何相关值null。 -
@PrasadWargad 他没有使用动态 SQL,他有一个包含表名的表,这是有效的
标签: mysql mysql-function