Ошибка при попытке создать функцию в firebird sql - PullRequest
0 голосов
/ 25 апреля 2018

Вот функция, которая вызывает ошибку

set term # ; 
create function f_class (salary int)
    returns varchar(5);
    as
        declare klass varchar(5);
    BEGIN
        IF salary < 40000
        THEN SET klass = 'LOW';
        else if salary < 68000 and salary > 39999
        then set klass = 'MID';
        else if salary < 100000 and salary > 67999
        then set klass = 'HIGH';
        else if salary > 100000
        then set klass = 'ELITE';
        end if;
        return klass;

    END#
    set term ; #

Я получаю эту ошибку с моей функцией

Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code    : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, column 8
function

и я не уверен почему.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Это должно быть написано, как показано ниже.

set term # ; 
create function f_class1 (salary integer)
    returns varchar(5)
    as
        declare klass varchar(5);
    BEGIN
        IF (salary < 40000) then
        klass = 'LOW';
        else if ((salary < 68000) and (salary > 39999)) then
        klass = 'MID';
        else if ((salary < 100000) and (salary > 67999)) then 
        klass = 'HIGH';
        else if (salary > 100000) then 
        klass = 'ELITE';        
        return klass;
    END#
set term ; #
0 голосов
/ 26 апреля 2018

Функция create function была введена в Firebird 3. Полученная ошибка означает, что вы используете Firebird 2.5 или более раннюю версию. Если вы хотите использовать create function, вам нужно обновить его до Firebird 3.

Как я вчера прокомментировал, в вашем коде также есть несколько других синтаксических ошибок:

  • точка с запятой после оператора return,
  • отсутствует скобка вокруг условий в if,
  • использование set для изменения переменной, вам нужно использовать присваивание без set.
...