2016-09-23 4 views
0

私はMYSQLでカーソルを使用しましたが、常にもう一度実行されています。このような コード:MYSQLでCURSORを使用してもう一度実行しないでください。

drop PROCEDURE if exists test_sp; 

DELIMITER // 

CREATE PROCEDURE test_sp() 
BEGIN 

DECLARE varid int; 
DECLARE varExit_loop BOOLEAN; 
DECLARE cursor_name CURSOR FOR 
SELECT id 
FROM test; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET varExit_loop = TRUE; 

drop table if exists test; 

create table test 
(id int); 
insert into test 
values 
(1), 
(2), 
(3); 

OPEN cursor_name; 
test_loop: LOOP 

    FETCH cursor_name INTO varid; 
select varid; 
    IF varExit_loop THEN 
     CLOSE cursor_name; 
     LEAVE test_loop; 
    END IF; 
END LOOP test_loop; 

END; // 

DELIMITER ; 

私はSPを実行した後、それは4つの結果、1,2,3および1以上3

を返しますが3 1より多くのを避けるための方法はありますか?

ありがとうございます!

+0

は、おそらくフェッチチェックと関係のないすべてのコードをフェッチチェック後に移動する必要があります。 (換言すれば、 'END IF;'の後に 'select varid;'を移動してください) – Uueerdo

+0

結果セット(または複数のセット)が戻ってきて何を達成しようとしていますか? – Drew

答えて

1

私は右

FETCH cursor_name INTO varid; 

IF varExit_loop THEN 
    CLOSE cursor_name; 
    LEAVE test_loop; 
END IF; 
END LOOP test_loop; 

を移動している、それがうまく働きました。

+0

それはそれのための正しい場所です。遅れてもすぐには十分ではありません。 –

関連する問題