mysql - SELECT 可以单独工作,但在分配给游标时返回 0 行

标签 mysql sql stored-procedures

我有一个 SELECT 语句,它可以独立工作,并返回约 8000 行。我试图将它作为游标添加到存储过程中,但它什么也没返回。

你能发现我错过了什么吗?

作品

SELECT a.customer, a.order_id
FROM temp_orders a
INNER JOIN (
    SELECT customer, MAX(order_id) AS last_order
    FROM temp_orders
    WHERE pay_status = 3
       OR pay_status = 4
    GROUP BY customer
) AS b ON  a.customer = b.customer
       AND a.order_id = b.last_order
WHERE pay_status = 3
   OR pay_status = 4
ORDER BY a.customer;

不再有效

DELIMITER //

DROP PROCEDURE IF EXISTS get_last_orders //
CREATE PROCEDURE get_last_orders()

    BEGIN

        DECLARE order_id VARCHAR(15);
        DECLARE customer_id INT;
        DECLARE done INT DEFAULT 0;

        DECLARE cur1 CURSOR FOR SELECT a.customer, a.order_id
                                FROM temp_orders a
                                INNER JOIN (
                                    SELECT customer, MAX(order_id) AS last_order
                                    FROM temp_orders
                                    WHERE pay_status = 3
                                       OR pay_status = 4
                                    GROUP BY customer
                                ) AS b ON  a.customer = b.customer
                                       AND a.order_id = b.last_order
                                WHERE pay_status = 3
                                   OR pay_status = 4
                                ORDER BY a.customer;

        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

        DROP TABLE IF EXISTS temp_last_orders;

        CREATE TABLE temp_last_orders (
            id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            order_id VARCHAR(15) NOT NULL,
            customer_id INT NOT NULL
        ) ENGINE = MYISAM
        COMMENT = 'Last paid order from each customer';

        OPEN cur1;
            read_loop: LOOP
                FETCH cur1 INTO order_id, customer_id;
                IF done THEN
                    LEAVE read_loop;
                END IF;

                INSERT INTO temp_last_orders (order_id, customer_id) VALUES (order_id, customer_id);

            END LOOP;
        CLOSE cur1;

    END; //

CALL get_last_orders();

最佳答案

变量和列名同名存在问题。尝试将变量 order_id 和 customer_id 重命名为 v_order_id 和 v_customer_id 并尝试一下。

关于mysql - SELECT 可以单独工作,但在分配给游标时返回 0 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19448389/

相关文章:

mysql - 在存储过程中更新和删除

mysql - 如何为 Freebsd shell 脚本编写 Auto Mysql 5.5.5 Install

sql - 为什么我右键单击任务时没有显示 "execute task"?

android - 如何将 Android 数据库与在线 SQL Server 同步?

java - H2:如何创建不带参数的存储过程

sql - Ssis错误包中的列引用无效

java - 内部异常 : java. sql.SQLSyntaxErrorException:用户缺乏权限或未找到对象:SEQUENCE 但我使用 MySQL

mysql - 使用 where 子句左连接三个表

java - 如何在Spring Boot程序中动态设置mysql的sql_mode?

mysql - 错误 : ORA-00933: SQL command not properly ended