2011-10-06 3 views
4

나는 postgres에 매우 익숙합니다.postgres 오류가 발생하거나 함수를 만들 때 "int"근처에 구문 오류가 발생했습니다.

CREATE OR REPLACE FUNCTION xyz(text) RETURNS INTEGER AS 
'DECLARE result int; 
BEGIN 
    SELECT count(*) into result from tbldealercommissions 
    WHERE 
    txtdealercode = $1; 

    if result < 1 then returns 1; 
    else returns 2 ; 
    end if; 
END; 
    ' 
LANGUAGE sql VOLATILE; 

오류이 오류의 원인이 무엇인지

ERROR: syntax error at or near "int" 
LINE 3: 'DECLARE result int; 

확인되지 않습니다 : 나는 시도는 다음 스크립트를 실행하려면이 오류가 발생했습니다. 어떤 도움을 주셔서 감사합니다.

답변

9

이 적합하지 :이 대신

LANGUAGE sql 

사용 :

LANGUAGE plpgsql 

사용하려고하는 구문은 순수 SQL 언어하지만 절차 PL/pgSQL의 언어 아니다는. PostgreSQL에서는 다른 언어를 설치할 수 있으며 PL/pgSQL은 그 점에서 오직 primus inter pares입니다. 이것은 또한이 언어가 설치되어 있지 않다는 오류 메시지가 나타날 수도 있음을 의미합니다. 이 경우 사용하는

CREATE LANGUAGE plpgsql; 

을 사용하십시오. PostgreSQL 버전에 따라이 단계를 수행하려면 수퍼 유저 권한이 필요할 수 있습니다.

재미있게 보내십시오.

+0

안녕 아, 나는 plpgsql하는 언어를 변경하고이 오류가있어 오류 : 언어 "plpgsql" 힌트를 존재하지 않습니다 사용이로 언어를로드 할 언어를 만듭니다 데이터 베이스. – Shiver

+0

게시물에 설명이 추가되었습니다. –

+1

@Shiver : PostgreSQL ** 9.0 ** 이후, [언어 PL/pgSQL은 기본적으로 설치됩니다] (http://www.postgresql.org/docs/9.1/interactive/release-9-0.html). 또한, 당신은 :'CREPL OR REPLACE LANGUAGE plpgsql;'을 할 수 있습니다. –

1

잘못된 언어 (예 : A.H.)가 사용되었지만 returns 키워드가있을뿐만 아니라 return이 필요합니다. 함수의 문자열 리터럴에 문제가 발생하지 않도록 다른 구분 기호를 사용하는 것이 좋을 수도 있습니다. $$은 매우 일반적입니다. 나는 당신의 기능이 더 같이해야한다고 생각 :

CREATE OR REPLACE FUNCTION xyz(text) RETURNS INTEGER AS $$ 
DECLARE result int; 
BEGIN 
    select count(*) into result 
    from tbldealercommissions 
    where txtdealercode = $1; 

    if result < 1 then return 1; 
    else return 2; 
    end if; 
END; 
$$ LANGUAGE plpgsql VOLATILE; 
관련 문제