如何从具有游标的存储过程中获取数据

时间:2012-09-05 10:00:57

标签: mysql

我有这个存储过程:

DELIMITER //
DROP PROCEDURE IF EXISTS cursor_example//

CREATE PROCEDURE cursor_example()
BEGIN
    DECLARE niche_id INT;
    DECLARE niche_name VARCHAR(100);

    DECLARE curl CURSOR FOR SELECT * FROM `niche`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

    OPEN curl;
    my_loop:LOOP
        FETCH curl INTO niche_id, niche_name;
        IF done=1 THEN
            LEAVE my_loop;
        END IF;
    END LOOP my_loop;
    CLOSE curl;
END//

DELIMITER ;

问题是,在光标完成迭代后,如何从光标中取出niche id和niche_name行。我不能从存储过程中得到一个结果集作为变量,不能吗?那么使用游标存储过程主要是出于内部目的吗?

1 个答案:

答案 0 :(得分:0)

如果结果是 - '标量值',那么您可以使用以下变体之一:

  1. 从程序中运行SELECT niche_id, niche_name;
  2. 使用OUT参数。
  3. 如果结果是一组值,那么您应该填充另一个表,例如临时表。

    此外,如果您想从表中读取一些数据并将其存储到另一个表中,请尝试使用INSERT ... SELECT语句而不是打开游标。