gpt4 book ai didi

mysql - 在 mysql 的触发器中调用函数

转载 作者:可可西里 更新时间:2023-11-01 07:45:07 26 4
gpt4 key购买 nike

函数

delimiter $$
create function my_calculation( s1_ia_att decimal, s1_t1 decimal, s1_t2 decimal, s1_t3 decimal, s2_ia_att decimal, s2_t1 decimal, s2_t2 decimal, s2_t3 decimal, s3_ia_att decimal, s3_t1 decimal, s3_t2 decimal, s3_t3 decimal, s4_ia_att decimal, s4_t1 decimal, s4_t2 decimal, s4_t3 decimal, s5_ia_att decimal, s5_t1 decimal, s5_t2 decimal, s5_t3 decimal, s6_ia_att decimal, s6_t1 decimal, s6_t2 decimal, s6_t3 decimal, s7_ia_att decimal, s7_t1 decimal, s7_t2 decimal, s7_t3 decimal, s8_ia_att decimal, s8_t1 decimal, s8_t2 decimal, s8_t3 decimal )
returns int
deterministic
begin
RETURN
(s1_t1 + s1_t2 + s1_t3 - LEAST(s1_t1, s1_t2, s1_t3)) / 2
+
CASE
WHEN s1_ia_att > 95 THEN 5
WHEN s1_ia_att BETWEEN 81 AND 95 THEN 4
WHEN s1_ia_att BETWEEN 76 AND 80 THEN 3
WHEN s1_ia_att BETWEEN 61 AND 75 THEN 2
WHEN s1_ia_att < 60 THEN 0

(s2_t1 + s2_t2 + s2_t3 - LEAST(s2_t1, s2_t2, s2_t3)) / 2
+
CASE
WHEN s2_ia_att > 95 THEN 5
WHEN s2_ia_att BETWEEN 81 AND 95 THEN 4
WHEN s2_ia_att BETWEEN 76 AND 80 THEN 3
WHEN s2_ia_att BETWEEN 61 AND 75 THEN 2
WHEN s2_ia_att < 60 THEN 0
END;
END $$
DELIMITER ;

这是我的触发器

delimiter $$
create trigger abc before insert
on `test` for each row
begin
declare `value` decimal;

SET NEW.s1_ia_tot = my_calculation( NEW.s1_ia_att, NEW.s1_t1, NEW.s1_t2, NEW.s1_t3 );
SET NEW.s2_ia_tot = my_calculation( NEW.s2_ia_att, NEW.s2_t1, NEW.s2_t2, NEW.s2_t3 );
SET NEW.s3_ia_tot = my_calculation( NEW.s3_ia_att, NEW.s3_t1, NEW.s3_t2, NEW.s3_t3 );
......
end $$
delimiter ;

我已经调整了我的触发器和功能没有任何反应 ia_att_tot 字段仍然是 null我找不到这段代码中的问题所在。谁能告诉我代码中有什么问题?

我的 table

CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`s1_ia_att` DECIMAL(12, 2) NULL,
....
....
`s1_t1` DECIMAL(12, 2) NULL,
`s1_t2` DECIMAL(12, 2) NULL,
`s1_t3` DECIMAL(12, 2) NULL,
....
....
`s1_ia_tot` DECIMAL(12, 2) NULL,
......
.....
PRIMARY KEY (`id`)
);

最佳答案

可能您将超出范围的值传递给函数中的 CASE 语句。由于 case 语句中没有 ELSE 子句,因此默认返回 NULL。定义一个 ELSE 子句并设置一个非 NULL 值。然后看看会发生什么。

关于mysql - 在 mysql 的触发器中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813125/

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