0

我试图让它像那样,但它只返回单行。第一次选择后程序退出。

DROP PROCEDURE IF EXISTS testProc;
DELIMITER $$
    CREATE PROCEDURE testProc(start_stamp INT, end_stamp INT, step INT)
    BEGIN
        DECLARE tmpStep INT;
        SET tmpStep = start_stamp;
        WHILE tmpStep < end_stamp DO
            SELECT tmpStep;
            SET tmpStep = tmpStep + step;
        END WHILE;
    END$$
DELIMITER ;

CALL testProc (1,10,1);

在这种情况下,所需的行为是返回从 1 到 10 的数字。

4

1 回答 1

1

要创建一个返回动态生成的结果集的过程,您必须在内部创建一个临时表,然后选择它。以下代码应该为您完成这项工作:

DROP PROCEDURE IF EXISTS testProc;
DELIMITER $$
CREATE PROCEDURE testProc(start_stamp INT, end_stamp INT, step INT)
BEGIN
    DECLARE tmpStep INT;
    DROP TABLE IF EXISTS `testProc$tmp`;
    CREATE TEMPORARY TABLE `testProc$tmp` (a INT);
    SET tmpStep = start_stamp;
    WHILE tmpStep < end_stamp DO
        INSERT INTO `testProc$tmp` VALUES(tmpStep);
        SET tmpStep = tmpStep + step;
    END WHILE;
    SELECT * FROM `testProc$tmp`;
END$$
DELIMITER ;

CALL testProc (1,10,1);

请注意,此代码将在函数调用后保留临时表,但名称被创建为“模糊”,因此它不会与其他表发生冲突。

于 2013-10-31T14:33:01.933 回答