0

単独で動作する 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();
4

2 に答える 2

1

変数と列名が同じ名前を持つという問題があります。変数 order_id と customer_id の名前を、たとえば v_order_id と v_customer_id に変更してみてください。

于 2013-10-18T11:37:22.860 に答える