mysql:PL/SQLでCursor declaration after handler declaration
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;