mysqlのPL/SQLでこんなエラーは出るとき
ERROR 1338 (42000): Cursor declaration after handler declaration
意味:カーソル宣言がハンドラ宣言よりあとで行われています。
Variable or condition declaration after cursor or handler declaration
意味:変数または条件宣言がカーソルまたはハンドラ宣言より後で行われています。
つまりPL/SQLの宣言は変数、条件、カーソル、ハンドラの順で行えということですね。
CREATE PROCEDURE procname( in arg1 VARCHAR(10), in arg2 VARCHAR(20) ) BEGIN -- 変数宣言 DECLARE UserName VARCHAR(10); DECLARE done INT DEFAULT 0; -- カーソル宣言 DECLARE cur_name CURSOR FOR SELECT user_name FROM table_name WHERE user_prop = arg1; -- ハンドラ宣言 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; -- 処理開始 OPEN cur_name; REPEAT FETCH cur_name INTO UserName; IF NOT done THEN -- いろいろ END If; UNTIL done END REPEAT; CLOSE cur_name; END;