Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

MySQL "can't return a result set in the given context" 오류메시지

ASP로 MySQL을 사용하고 있었습니다. 디비연결해서 쿼리실행하고 결과값받아서 사용하는 웹에서는 아주 일반적인 작업이지요. 그런데 Stored Procedure를 사용하려고 하는데 문제가 생겼습니다. 디비연결은 ODBC를 사용하고 있었습니다.

사용자 삽입 이미지

"PROCEDURE PROCEDURENAME can't return a result set in the given context"라는 오류메시지입니다. result set을 사용할 수 없더니 이리저리 해봐도 해결책을 찾을 수 없었습니다. 해당 오류메시지에 대해서는 MySQL 메뉴얼에 언급이 있었지만 이리저리 찾아본 결과 PHP나 C에 해당하는 내용인것 같았습니다. 스토어드 프로시져는 크게 이렇다할 게 없는 SELECT쿼리로 결과값 받아오는 정도였습니다.

쓰고있는 라이브러리쪽 문제인가 해서 라이브러리를 완전히 걷어내고 ASP에서 직접 디비 붙어서 수행해 보아도 결과는 마찬가지였습니다. 일반적인 SELECT쿼리를 사용했을때는 괜찮았는데 Stored Procedure를 사용하면 위의 에러메시지가 나타났습니다. MySQL은 5.0.27 Community 버전이었습니다.

Stored Procedure가 문제인지 ODBC가 문제인지 의심하고 있었는데 범인은 ODBC였습니다. 정확히 어떤부분의 동작때문인지까지는 파악하지 못했지만 MySQL ODBC 3.51 Driver를 사용하고 있었는데 버전이 맞지 않아서 지원이 제대로 되지 않은 것입니다. ODBC를 5.1.5버전으로 업그래이드하니까 문제는 바로 해결되었습니다.

ODBC 5.1버전은 MySQL사이트에서 다운로드 받을 수 있습니다. 윈도우에 경우 다운로드 받은 후 인스톨러로 설정하면 [제어판] - [관리도구] - [데이터 원본 (ODBC)] 에서 드라이버탭에 가면

사용자 삽입 이미지
MySQL ODBC 5.1 Driver 가 설치된 것을 볼 수 있습니다.


Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER=MySQL ODBC 5.1 Driver;SERVER=서버아이피;DATABASE=디비이름;UID=사용자이름;PWD=비밀번호;")

커넥션 연결 드라이버를 위 코드처럼 MYODBC방식으로 MySQL 5.1 ODBC Driver를 이용해서 하면 됩니다.
2009/05/31 15:27 2009/05/31 15:27