2017-12-26 18 views
0

Redshift를 배우기 시작했고 Redshift에서 작동하도록 MySQL 서버에서 사용되는 함수를 변환하려고합니다. 스택 오버 플로우 마법사가 방향을 제시 할 수 있기를 기대하면서 나는 지금까지 아무런 운이 없었습니다. MySQL 기능을 Redshift로 변환

CREATE FUNCTION SS_Ans_to_Num(answer VARCHAR(1000)) 
RETURNS INT 
BEGIN 
declare answer_num int(11); 

if answer = 'No' then SET answer_num = 0; 
elseif answer IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') then SET answer_num = 0; 
elseif answer IN ('Strongly Disagree', 'Totalmente en desacuerdo') then SET answer_num = 1; 
elseif answer IN ('Poor','Mala') then SET answer_num = 1; 
elseif answer IN ('Disagree','En desacuerdo') then SET answer_num = 2; 
elseif answer IN ('Fair','Regular') then SET answer_num = 2; 
elseif answer IN ('Neutral','Neutro') then SET answer_num = 3; 
elseif answer IN ('Agree','De acuerdo') then SET answer_num = 4; 
elseif answer IN ('Very Good','Muy buena') then SET answer_num = 4; 
elseif answer IN ('Yes','Sí') then SET answer_num = 5; 
elseif answer IN ('Strongly Agree','Totalmente de acuerdo') then SET answer_num = 5; 
elseif answer IN ('Excellent','Excelente') then SET answer_num = 5; 
else SET answer_num = 0; 
end if; 

return (answer_num); 

END; 

나는 일하는 것이이 라인을 따라 뭔가를 생각하지만 그렇지 않습니다 :

CREATE FUNCTION SS_Ans_to_Num(answer VARCHAR(1000)) 
RETURNS INTEGER 
STABLE 
AS 
    $$ 
    CASE 
    WHEN answer = 'No' THEN SET answer_num = 0; 
    WHEN answer IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') then SET answer_num = 0; 
    WHEN answer IN ('Strongly Disagree', 'Totalmente en desacuerdo') then SET answer_num = 1; 
    WHEN answer IN ('Poor','Mala') then SET answer_num = 1; 
    WHEN answer IN ('Disagree','En desacuerdo') then SET answer_num = 2; 
    WHEN answer IN ('Fair','Regular') then SET answer_num = 2; 
    WHEN answer IN ('Neutral','Neutro') then SET answer_num = 3; 
    WHEN answer IN ('Agree','De acuerdo') then SET answer_num = 4; 
    WHEN answer IN ('Very Good','Muy buena') then SET answer_num = 4; 
    WHEN answer IN ('Yes','Sí') then SET answer_num = 5; 
    WHEN answer IN ('Strongly Agree','Totalmente de acuerdo') then SET answer_num = 5; 
    WHEN answer IN ('Excellent','Excelente') then SET answer_num = 5; 
    ELSE SET answer_num = 0; 
    END CASE; 

RETURN (answer_num); 

$$ LANGUAGE SQL 

답변

2

올바른 구문은 다음과 같습니다

CREATE OR REPLACE FUNCTION SS_Ans_to_Num(TEXT) 
RETURNS INTEGER 
STABLE 
AS 
    $$ 
    SELECT CASE 
    WHEN $1 = 'No' THEN 0 
    WHEN $1 IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') THEN 0 
    WHEN $1 IN ('Strongly Disagree', 'Totalmente en desacuerdo') THEN 1 
    WHEN $1 IN ('Poor','Mala') THEN 1 
    WHEN $1 IN ('Disagree','En desacuerdo') THEN 2 
    WHEN $1 IN ('Fair','Regular') THEN 2 
    WHEN $1 IN ('Neutral','Neutro') THEN 3 
    WHEN $1 IN ('Agree','De acuerdo') THEN 4 
    WHEN $1 IN ('Very Good','Muy buena') THEN 4 
    WHEN $1 IN ('Yes','Sí') THEN 5 
    WHEN $1 IN ('Strongly Agree','Totalmente de acuerdo') THEN 5 
    WHEN $1 IN ('Excellent','Excelente') THEN 5 
    ELSE 0 
    END 

    $$ LANGUAGE SQL 

구문은 SQL 문 유사하다 절차 적 언어보다는 오히려. 더 많은 프로그래밍 언어를 사용하려면 language SQL 대신 language plpythonu을 사용하십시오.

참조 : CREATE FUNCTION 설명서