Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在我的sql中的触发器中调用函数_Mysql_Sql_Database_Rdbms - Fatal编程技术网

Mysql 在我的sql中的触发器中调用函数

Mysql 在我的sql中的触发器中调用函数,mysql,sql,database,rdbms,Mysql,Sql,Database,Rdbms,作用 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_

作用

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 ;
我已经调整了我的触发器和功能 并且,
ia_att_tot
字段仍然是
null
我无法找到此代码中的问题所在。 有人能告诉我我的代码出了什么问题吗

我的桌子

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子句并设置非空值。然后看看会发生什么。

代码看起来正常。但是,
value
的声明很突出,因为它没有被使用。真正的代码是什么样子的?
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`)
);