mysql:PL/SQLでCursor declaration after handler declaration


Pocket

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;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です