2013-08-22 3 views
1

나는 때까지 잘 작동 웹 프로덕션 서버에 개발 데이터베이스를 복사하고있어 다음저장 프로 시저를 만들 때 MySQL 버전 차이점이 있습니까?

CREATE PROCEDURE sprc_list_user_accounts 
    (
     int_page_number  INT, 
     int_recs_per_page INT 
    ) 
    BEGIN 
     DECLARE  int_record_first INT; 
     IF   int_page_number = 0 
      THEN SELECT   record_identifier, 
            name_account, 
            name_last, 
            name_first, 
            flag_disabled 
         FROM  acs_accounts 
         ORDER BY name_last, 
            name_first; 
      ELSE SET int_record_first = ((int_page_number - 1) * int_recs_per_page); 
        SELECT   record_identifier, 
            name_account, 
            name_last, 
            name_first, 
            flag_disabled 
         FROM  acs_accounts 
         ORDER BY name_last, 
            name_first 
         LIMIT  int_record_first, int_recs_per_page; 
     END IF; 
    END $$ 

이 내 자신의 컴퓨터에서 완벽하게 작동 - Win7에/64 MySQL은 5.5.24, 그러나 웹에 질식 머신 - Linux/64 MySQL 5.1.55. 짜증나는 것은 앞의 모든 테이블과 절차가 잘 나타나 있다는 것입니다. 결과는 설명이없는 매우 도움이되지 않습니다.


정확한 응답은

Error 

SQL query: Documentation 

-- ===== 
-- LISTS 
-- ===== 
CREATE PROCEDURE sprc_list_user_accounts(
int_page_number INT, 
int_recs_per_page INT 
) BEGIN DECLARE int_record_first INT; 

SELECT COUNT(*) 
FROM acs_accounts; 

IF int_page_number =0 THEN SELECT record_identifier, name_account, name_last, name_first 
FROM acs_accounts 
WHERE flag_disabled =0 
ORDER BY name_last, name_first; 

ELSE SET int_record_first = ((
int_page_number -1 
) * int_recs_per_page) ; 

SELECT name_account, name_last, name_first, flag_disabled 
FROM acs_accounts 
ORDER BY name_last, name_first 
LIMIT int_record_first, int_recs_per_page; 

END IF ; 

END $$ 

MySQL said: Documentation 
#1064 - 

했다 --- 메시지의 끝!

+2

"* 1064 설명 없음 *"? 일반적으로 1064 개의 오류는 명령에서 오류가 "가장 가깝다"라고 말하면서 가장 중요한 정보입니다. – eggyal

+0

가장 중요 할뿐만 아니라 질문에 제공된 정보도 제공되지 않습니다. 오류가 발생하여 도움이 필요하면 일반적으로 * 전체 * 오류 메시지를 게시하는 것이 좋습니다. 대중적인 신념과는 달리 메시지에는 실제로 유용한 정보가 들어 있습니다. 그럼에도 불구하고 개발 환경에서 프로덕션보다 새로운 버전의 서버를 실행해서는 안됩니다. 스크래치 (scratch), 당신은 결코 당신의 dev 환경에서 프로덕션 환경에있는 것보다 * 다른 * 서버 버전을 실행해서는 안됩니다. 그런 식으로 항상 이런 쓰레기가 생깁니다. – NotMe

+0

경연 금지. 반면에 구문은 꽤 표준 SQL입니까? –

답변

0

LIMIT 절에 지역 변수를 사용하는 것은 MySQL 5.5.6까지 지원되지 않습니다.

MySQL의 이전 버전의 Bug #11918 SP does not accept variables in LIMIT clause

해결 방법을 참조 동적 SQL을 사용하는 것입니다. 즉, 저장 프로 시저에서 쿼리를 준비하고 실행해야합니다.

추신 : 배포하려는 MySQL과 동일한 버전으로 개발하는 것이 좋습니다.

+0

많은 감사. 불행히도 나는 어느 쪽을 제어 할 수 없다. 나는 커다란 기계의 작은 톱니이다. :) –

+0

죄송합니다. 그러나 작은 톱니 바퀴조차도 자신의 선택이 생산성을 낭비하게하는 결과를 낳을 수 있음을 이해하게하기 위해 권력자들에게 진실을 말할 수 있습니다. :-) –

+0

덧붙여 StackOverflow에서는 도움이되었던 답변을 upvote하는 것이 일반적이며 체크 마크 아이콘을 클릭하여 문제를 해결하는 데 가장 도움이되는 답변을 선택하는 것이 일반적입니다. –

관련 문제