gpt4 book ai didi

MYSQL触发器错误(很多函数)

转载 作者:行者123 更新时间:2023-11-29 21:36:21 24 4
gpt4 key购买 nike

我似乎找不到我的代码有任何错误来触发。 (我通常使用oracle编码,但我在这个项目中转换为我的sql,检查所有函数并转换那些在mysql中不可用的函数)

这是代码:

CREATE TRIGGER `transaction_before_insert` BEFORE INSERT ON `transaction` FOR EACH ROW BEGIN
DECLARE TEMPKODE VARCHAR(12);
DECLARE TEMP VARCHAR(5);
TEMP:= CONCAT('T',DATE_FORMAT(NOW(),'%Y'));
SELECT CONCAT(TEMP, LPAD(NVL(MAX(CAST(SUBSTR(TRANSACTION_ID,5,5) AS UNSIGNED))+1,1),5,0))
FROM TRANSACTION INTO TEMPKODE
WHERE SUBSTR(TRANSACTION_ID,1,4) = TEMP;
NEW.TRANSACTION_ID := TEMPKODE;
END

编辑1:

如果有任何代码差异,我将从 heidisql 进行编码,因为我听说如果我在 mysql 工作台上执行此操作,我应该使用
设置变量
而不是直接
变量:=

期望的结果是外汇:T201600001
//T代表交易,2016年我从dateformat得到的,剩下的就是从数据库中选择最大的数据
这是一个生产计划软件,所以我正在制作交易代码

最佳答案

NVL,是为您构建的函数吗?,Oracle NVL 函数在 MySQL 中不存在(在 MySQL 中查找其等效项),参见IFNULL .

DELIMITER $$

BEGIN
DECLARE TEMPKODE VARCHAR(12);
DECLARE TEMP VARCHAR(5) DEFAULT CONCAT('T',DATE_FORMAT(NOW(),'%Y'));
-- OR: SET TEMP := CONCAT('T',DATE_FORMAT(NOW(),'%Y'));
-- TEMP := CONCAT('T',DATE_FORMAT(NOW(),'%Y'));

/*
SELECT CONCAT(TEMP,LPAD(NVL(MAX(CAST(SUBSTR(TRANSACTION_ID,5,5) AS UNSIGNED))+1,1),5,0))
FROM TRANSACTION INTO TEMPKODE
WHERE SUBSTR(TRANSACTION_ID,1,4) = TEMP;
*/

SELECT CONCAT(TEMP,LPAD(COALESCE(MAX(CAST(SUBSTR(TRANSACTION_ID,5,5) AS UNSIGNED))+1,1),5,0))
FROM TRANSACTION
WHERE SUBSTR(TRANSACTION_ID,1,4) = TEMP INTO TEMPKODE;

-- NEW.TRANSACTION_ID := TEMPKODE;
SET NEW.TRANSACTION_ID := TEMPKODE;
END$$

DELIMITER ;

更新

您可以使用 answer 进行简化@GordonLinoff 的:

SET NEW.TRANSACTION_ID := CONCAT(...);

关于MYSQL触发器错误(很多函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34899034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com