본문 바로가기

Database/mariaDB administrator

[Mysql] Cursor declaration after handler declaration 에러 해결 방법

[Mysql] Cursor declaration after handler declaration 에러 해결 방법

Cursor declaration after handler declaration 에러 해결 방법

 

mysql에서 열심히 프로시저를 개발하는 도중 만나게된 에러 입니다.
그리고 그 에러 해결방법을 남겨 둡니다.

제가 이번에 mysql 프로시저 개발을 하면서 필요한 여러 변수들을 선언하고, 커서를 선언하고, sql exception과 fetch를 위해서 HANDLER를 선언을 했습니다.

여기서 위 세가지 선언들은 모두 declare 명령을 통해서 정의가 되죠.
그렇게 모두 잘 선언을 하고, 프로그램을 작성 한뒤에 프로시저를 생성을 하는데 아래와 같은 메시지가 등판하게 됩니다.

에러 메시지

Cursor declaration after handler declaration 에러가 발생 한거죠.
그래서 바로 구글 검색 합니다. 당연히 해야죠. 구글신께 물어봐야 합니다.

구글 검색

요약하자면, "커서를 선언 하고나서 다른 변수를 선언하면 안된다" 가 주된 의견 들 이었습니다.
그말도 맞는 말이죠.

그런데 전 이미 그렇게 하고 있었습니다.
아래 그림과 같이 말이죠.

처음 declare 순서

1. 일반 변수 선언
2. HANDLER 선언
3. CURSOR 선언

커서 선언이 가장 아래 있죠.
이미.. 이렇게 되어 있는데..
왜 자꾸 에러가 날까요..
혹시나 하고 아래 다른 declare 부가 있는지 찾아봐도 없습니다.

그래서 혹시나 하고 다음과 같이 바꾸어 봤습니다.
1. 일반 변수 선언
2. CURSOR 선언
3. HANDLER 선언

CURSOR 선언 과 HANDLER 선언 자리를 바꾸어 봤습니다.

선언부 순서 변경

어랏;;
이렇게 하닌깐 에러없이 되네요.

결국 mysql SP에서 변수 선언의 순서는 다음과 같습니다.
잘 기억해 두시길 바랍니다.

1. 일반 변수 선언
2. CURSOR 선언
3. HANDLER 선언

감사합니다.
by.sTricky