Ошибка синтаксиса postgres на уровне или около "int" при создании функции - PullRequest
4 голосов
/ 06 октября 2011

Я очень новичок в postgres.Я получил эту ошибку при попытке запустить следующий скрипт:

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;

Не уверен, что является причиной этой ошибки.Любая помощь приветствуется.

Ответы [ 2 ]

9 голосов
/ 06 октября 2011

Это не подходит:

LANGUAGE sql

используйте это вместо:

LANGUAGE plpgsql

Синтаксис, который вы пытаетесь использовать, нечистый язык SQL, но процедурный язык PL / pgSQL.В PostgreSQL вы можете устанавливать разные языки, и PL / pgSQL - это только первый шаг в этом отношении.Это также означает, что вы можете получить сообщение об ошибке, что этот язык не установлен.В этом случае используйте

CREATE LANGUAGE plpgsql;

, который активирует его.В зависимости от версии PostgreSQL для выполнения этого шага могут потребоваться права суперпользователя.

Веселитесь.

1 голос
/ 06 октября 2011

Мало того, что вы используете не тот язык (как отметил А.Х.), но есть ключевое слово 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...