2013-01-23 4 views
0

첫 번째 ";"다음에 계속 1064 구문 오류가 발생합니다. 첫 번째 문장에서. herehere에서 유용한 팁을 얻으려고 시도했습니다. 누구 한테 도움을 줘?mysql case/when procedure in procedure

DELIMITER // 

CREATE PROCEDURE `test`() 
BEGIN 
    SELECT *, 
     case 
     when variable_1 between 0.75 and 4  then 4; 
     when variable_1 between 0 and 0.74 then "<4"; 
     when variable_1 between 4.1 and 365 then ">4"; 
     end case as variable_2; 
END // 
답변 다음

개정 질문 :

실제 코드 :

DELIMITER // 

CREATE PROCEDURE `infant_outcomes`.`new_procedure`() 
BEGIN 
SELECT * FROM CDI 

     INNER JOIN 


    -- CDI subquery grouping and filtering 
    (SELECT CDI.subj_CDI as subj_CDI_grouping, Min(hearing_age_CDI) min_hearing_age_CDI, 
    case 
    when CDI.hearing_age_CDI between 1.75 and 4.25 then 3 
    when CDI.hearing_age_CDI between 4.75 and 7.25 then 6 

    end as hearing_age_CDI_group 
    FROM CDI 
    group by CDI.subj_CDI, hearing_age_CDI_group 
    ORDER BY CDI.subj_CDI, CDI.hearing_age_CDI ASC) CDI_filtered 

     on 
      CDI.subj_CDI = subj_CDI_grouping 
      AND CDI.hearing_age_CDI = CDI_filtered.min_hearing_age_CDI 

    where hearing_age_CDI_group is not null 
    ORDER BY 
    CDI.subj_CDI, CDI_filtered.hearing_age_CDI_group 
END // 

난에서 구문 오류를 받고 있어요 "끝 //"동안 다음과 같은 두 가지 답변의 작품의 조합 , 실제 코드 자체가 해당 오류를 throw합니다.

답변

1

성명을 위반 했으므로.

SELECT *, 
    case 
    when variable_1 between 0.75 and 4  then "4" 
    when variable_1 between 0 and 0.74 then "<4" 
    when variable_1 between 4.1 and 365 then ">4" 
    end as variable_2; 

당신은

ORDER BY 
CDI.subj_CDI, CDI_filtered.hearing_age_CDI_group; 
               ^________ this. 
+0

감사합니다 - 예제 코드는 ... 위에 붙여 "실제"코드가하지 않는, 생각을 일을? – user996544

+0

@ user996544 대답에서 말했듯이, 모든 'when'조건 이후에 ';'하지만 'CASE'전체가 CASE에서 END까지의 명령문에 있습니다. 또한 처음/그때 당신은 따옴표를 놓친. –

1

사례 표현은 "말"로 끝나는 세미콜론을하지 "최종 경우"를 놓쳤다.

는 후행 "의 경우"제거 :

DELIMITER // 

CREATE PROCEDURE `test`() 
BEGIN 
    SELECT *, 
     case 
     when variable_1 between 0.75 and 4  then 4; 
     when variable_1 between 0 and 0.74 then "<4"; 
     when variable_1 between 4.1 and 365 then ">4"; 
     end as variable_2; -- "case" removed 
END // 
관련 문제