mysql - SQL函数返回select case的结果

标签 mysql sql function triggers case

我需要创建一个接受参数 id 的函数。然后我在表上针对给定的 id 执行选择案例。 case 中的when 语句计算行数。

这是我的功能:

CREATE function db_name.insert_stage(idStage INT)
    returns integer
    BEGIN   
        SELECT CASE
            WHEN COUNT(*) < 10 THEN 0
            WHEN COUNT(*) >= 10 and COUNT(*) <= 12 THEN 392
            WHEN COUNT(*) >= 13 and COUNT(*) <= 17 THEN 490
            ELSE 588
            END AS cost
        FROM inscriptions WHERE paid = 1 AND id_stage = idStage;
        RETURN cost;
    END

然后,我使用触发器在字段中为阶段中已存在的每一行设置成本。该触发器还将在阶段插入时调用:

CREATE TRIGGER insert_stage_frais_secretariat BEFORE INSERT ON stage
FOR EACH ROW SET stage.fraisSecretariat = select anper_extranet.insert_stage(stage.id);

我不知道触发器是否工作,因为该功能还没有工作。

这是 phpmyadmin 告诉我的:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 10 行 '' 附近使用的正确语法

我不知道第 10 行出了什么问题,因为对我来说,尽管我尝试了 select 语句并且它有效,但我感觉就是这个问题。

最佳答案

试试这个:

delimiter //
CREATE FUNCTION db_name.insert_stage(idStage INT)
RETURNS Integer
BEGIN
  DECLARE var_name INTEGER;
  SET var_name = 0;
  SELECT CASE
    WHEN COUNT(*) < 10 THEN 0
    WHEN COUNT(*) >= 10 and COUNT(*) <= 12 THEN 392
    WHEN COUNT(*) >= 13 and COUNT(*) <= 17 THEN 490
    ELSE 588
    END
into var_name
FROM inscriptions WHERE paid = 1 AND id_stage = idStage;   
 RETURN var_name;
END //

关于mysql - SQL函数返回select case的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18652576/

相关文章:

mysql - 如果特定列值不同则更新行,否则插入新行

mysql - 我需要在 "where"中添加一些条件,具体取决于变量字段值

php - CakePHP 分页 - 按虚拟字段排序

javascript - OnClick 按钮从数据库获取并实时显示在输入字段上

sql - 是否有 PBKDF2 的 SQL 实现?

mysql - 如何在mysql查询列中打印基于条件的值

sql - SQL SELECT 中的 bool 逻辑

c - 仅当从其他函数调用该函数时,如何在递归函数中初始化一个整数?

在 C 中通过数组调用函数?

php - 将数组定义为函数调用的一部分是不好的做法吗?