MySQL 存储过程 : How to declare a Cursor for a Select from a temporary table?

标签 mysql sql stored-procedures

在 MySQL 存储过程中,如何为从 select 语句创建的临时表声明游标。 谢谢,

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_foo`$$
CREATE PROCEDURE sp_foo()
BEGIN   
    DROP TEMPORARY TABLE IF EXISTS `TmpMyTable`;
    CREATE TEMPORARY TABLE `TmpMyTable` (
        `id`            INT(11) NOT NULL AUTO_INCREMENT,
        `person_id`     INT(11) NOT NULL,
        `first_name`    VARCHAR(60) NOT NULL,
        `last_name`     VARCHAR(60) NOT NULL,
        PRIMARY KEY  (`id`),
        INDEX `idx_first_name` (`person_id`),
        INDEX `idx_first_name` (`first_name`)
    ) ENGINE=MYISAM         
        SELECT 
            id AS `person_id`,
            first_name,
            last_name
        FROM person
    ;

    DECLARE _person_id INT(11); 
    DECLARE personCursor CURSOR 
    FOR 
        SELECT * FROM TmpMyTable;       

    OPEN personCursor;
    LOOP
        FETCH personCursor INTO _person_id;

        ...

    END LOOP;   
    END$$
DELIMITER ;

最佳答案

在您的示例中,在创建临时表之前进行游标声明。看似不合逻辑,但确实有效。

关于MySQL 存储过程 : How to declare a Cursor for a Select from a temporary table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161358/

相关文章:

c++ - 如何将二进制 std::string 插入 BLOB

mysql - 通过 sshfs 连接到远程套接字

mysql - 将行转为列 - 评级数据库

php - Opencart 2.3.0.2 : additional column in product list using multi user extension

mysql - 返回 bigint 时,函数提示 [不允许从函数返回结果集]

sql - 具有对等关系的递归查询

mysql - 如何在不中断应用程序控制流的情况下调试 MySql 存储过程

grails - 如何使用参数调用我的存储过程形成 Grails 中的域类

sql - 使用递归查询的存储过程

mysql - Puppet包资源的默认提供者是什么