mysql - 这个sql函数的正确版本是什么?
问题描述
生成新id
as的正确方法是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 10 秒后执行完成,发生 1 个错误。
解决方案
试试这个
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 ;
推荐阅读
- amazon-web-services - 无法在 cloudformation 中创建简单的存储桶
- python - 我正在尝试生成谢尔宾斯基三角形的输出。我想知道如何使用 2d 点类中的 midpt 函数来实现此输出?
- python - 如何访问n叉树中节点的父节点?
- c# - 在 .net 核心中找不到 ILogger 类
- python - 代码在函数之外工作,但不在函数内部
- javascript - 路由包含在不同文件中时未定义猫鼬模式
- dart - 我的变量会自动更新......当我只设置一次时。为什么会这样?
- json - 从 Oracle 表中的 CLOB 数据类型字段中提取文本
- c# - 如何在数据绑定值更改时更新图像?
- android - ReclycleView 具有分组数据和横向和纵向模式的响应标题