尝试在firebird sql中创建函数时出错

时间:2018-04-25 06:09:01

标签: sql firebird

这是导致错误的函数

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 :(得分:0)

Firebird 3中引入了create function功能。您获得的错误意味着您使用的是Firebird 2.5或更早版本。如果您想使用create function,则需要升级到Firebird 3。

正如我昨天评论的那样,您的代码中还有其他一些语法错误:

    在return-clause之后
  • 分号,
  • 在if,
  • 条件下缺少括号
  • 使用set修改变量,您需要使用不带set的作业。

答案 1 :(得分:0)

应该这样写。

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 ; #