首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带游标的MySQL函数

问带游标的MySQL函数
EN

Stack Overflow用户
提问于 2020-05-14 01:50:51
回答 1查看 85关注 0票数 1

我必须创建一个函数,它给出了三个整数类型的参数,其中第一个表示一小时,第二个表示一分钟,第三个表示一秒,返回表中的记录数,其中DATETIME类型的列,小时等于第一个参数,或者分钟等于第二个参数,或者秒等于第三个参数。我需要检查参数对于要比较的列是否具有有效的值​​,否则返回值为-1。我已经这样做了,但它不能正常工作。

代码语言:javascript
复制
DELIMITER //
CREATE FUNCTION orders_placed(par_hour INT , par_minute INT , par_second INT )
RETURNS INT
BEGIN
DECLARE var_date DATETIME;
DECLARE var_counter INT;
DECLARE c1 CURSOR FOR SELECT date FROM orders;
            IF (par_hour NOT BETWEEN 0 AND 23 OR par_minute NOT BETWEEN 0 AND 59 OR par_second NOT BETWEEN 0 AND 59) THEN 
                    SET var_counter = -1;
            END IF; 
    OPEN c1;

        bucle: LOOP 

            FETCH c1 into var_date;

                IF (par_hour = hour(var_date) OR par_minute = minute(var_date) OR par_second = second(var_date)) THEN

                    SET var_counter= var_counter + 1;

                END IF;

        END LOOP bucle;

    CLOSE c1;
RETURNS var_counter;
END //
DELIMITER ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 02:15:33

您的查询有一些问题。

代码语言:javascript
复制
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `orders_placed`(par_hour INT , par_minute INT , par_second INT ) RETURNS int
    DETERMINISTIC
BEGIN
DECLARE var_date DATETIME;
DECLARE var_counter INT DEFAULT 0;
DECLARE finished INTEGER DEFAULT 0;
DECLARE c1 CURSOR FOR SELECT `date` FROM orders;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET finished = 1;

    IF (par_hour NOT BETWEEN 0 AND 23 OR par_minute NOT BETWEEN 0 AND 59 OR par_second NOT BETWEEN 0 AND 59) THEN 
            SET var_counter = -1;
    ELSE 
        OPEN c1;
            bucle: LOOP 
                FETCH c1 into var_date;
                IF finished = 1 THEN 
                    LEAVE bucle;
                END IF;
                    IF (par_hour = hour(var_date) OR par_minute = minute(var_date) OR par_second = second(var_date)) THEN
                        SET var_counter= var_counter + 1;
                    END IF;
            END LOOP bucle;
        CLOSE c1;
    END IF;
RETURN var_counter;
END$$
DELIMITER ;

你确定我不想检查,如果所有的数字小时,分钟和秒都等于你的日期,因为你只检查其中一个是eual。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61781462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档