독자적으로 작동하는 SELECT 문이 있으며 ~ 8000 행을 반환합니다. 커서로 저장 프로 시저에 추가하려고하지만 아무 것도 반환하지 않습니다.SELECT는 독자적으로 작동하지만 커서에 할당되면 0 행을 반환합니다.
내가 놓친 것을 발견 할 수 있습니까?
작품
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();
아마 같은 이름을 가진 변수와 열 이름에 문제가있는 것입니다. 예를 들어 v_order_id 및 v_customer_id와 같이 order_id 및 customer_id 변수의 이름을 바꾸고 시도해보십시오. – Mikhail
@Mikhail 좋아, 고마워! 그것이 문제였습니다. 응답으로 게시하고 동의 할 것입니다. – BadHorsie
@BadHorsie Glad, 도움이 :) 답변을 추가했습니다. – Mikhail