Мне нужно написать очень простую функцию Firebird
create or alter function some_function (A NUMERIC, B NUMERIC)
returns double precision
as
begin
return
case
when (B <= 2.5) then A - 2
when (B <= 5.0) then A - 1
else A
end;
end;
Однако если первый end; помечается как ошибка Неожиданное завершение команды. Моей первой мыслью было, что, возможно, Firebird не позволяет возвращать искомый случай в функции, поэтому я переписал это так:
create or alter function some_function (A NUMERIC, B NUMERIC)
returns double precision
as
declare result double precision;
begin
result = case
when (B <= 2.5) then A - 2
when (B <= 5.0) then A - 1
else A
end;
return result;
end;
Но опять же, он помечает ту же ошибку, теперь на первом конце;. Документация Firebird об искомом случае (https://firebirdsql.org/refdocs/langrefupd15-case.html) даже показывает почти такой же сценарий. Что случилось? Конечно, я решил это с помощью традиционного if then/else
, но я хочу знать, не ошибся ли я в чем-то или, возможно, в Firebird (WI-V3.0.7.33374 Firebird 3.0/64/W2012) есть какая-то ошибка.
;
для разделения запросов перед их отправкой на сервер (например, ISQL Firebird делает это). Если вы используете инструмент запросов, такой как ISQL или FlameRobin, вам, возможно, придется использоватьSET TERM
для переключения терминатора оператора (например, используйтеset term #;
в начале иend#
вместо последнегоend;
, за которым следуетset term ;#
для переключи обратно). - person Mark Rotteveel   schedule 18.12.2020