mysql新建函数

DELIMITER $$

  USE `cc`$$

DROP FUNCTION IF EXISTS `cal_exception_func`$$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    FUNCTION `jira`.`cal_exception_func`(
    originalCalTime VARCHAR(255),
    actualTime VARCHAR(255),
    operator VARCHAR(255),
    sprintName VARCHAR(255),
    taskStatus VARCHAR(255),
    startTime VARCHAR(255),
    completedTime VARCHAR(255),
    taskId VARCHAR(255)
    ) RETURNS TEXT DETERMINISTIC
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
         DECLARE v_exceptionResult TEXT;
    DECLARE v_currentDate DATETIME;
    SET v_currentDate = NOW();
    SET v_exceptionResult = '';

    -- 估时超过40小时
    IF originalCalTime > 40 THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '估时超过40小时,');
    END IF;

    -- 实际工时超过了预估时间
    IF actualTime > originalCalTime THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '实际工时超过了预估时间,');
    END IF;

    -- 未指定经办人
    IF operator IS NULL THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '未指定经办人,');
    END IF;

    -- 任务未关联冲刺
    IF sprintName IS NULL THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '任务未关联冲刺,');
    END IF;

    -- 任务未关联需求
    IF taskId IS NULL THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '任务未关联需求,');
    END IF;

    -- 已完成任务未填实际工时
    IF taskStatus = '完成' AND actualTime IS NULL THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '已完成任务未填实际工时,');
    END IF;

    -- 没有按照预计时间完成
    IF taskStatus != '完成' AND completedTime < v_currentDate THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '没有按照预计时间完成,');
    END IF;

    -- 没有按照预计时间开始
    IF startTime < v_currentDate AND taskStatus = '新建' THEN
        SET v_exceptionResult = CONCAT(v_exceptionResult, '没有按照预计时间开始,');
    END IF;

    RETURN v_exceptionResult;

    END$$

DELIMITER ;

调用 SELECT cal_exception_func('50', '30', 'operator', 'sprintName', 'taskStatus', '2023-09-24 00:00:00', '2023-09-25 00:00:00', 'taskId');