Как решить ошибку поиска Firebird внутри функции PSQL

Мне нужно написать очень простую функцию 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) есть какая-то ошибка.


person alvaroc    schedule 18.12.2020    source источник
comment
Как вы это делаете (какой инструмент)? Похоже, вы используете что-то, что использует ; для разделения запросов перед их отправкой на сервер (например, ISQL Firebird делает это). Если вы используете инструмент запросов, такой как ISQL или FlameRobin, вам, возможно, придется использовать SET TERM для переключения терминатора оператора (например, используйте set term #; в начале и end# вместо последнего end;, за которым следует set term ;# для переключи обратно).   -  person Mark Rotteveel    schedule 18.12.2020
comment
Марк, опубликуйте свой комментарий как решение, чтобы проголосовать за него. Я использовал Eclipse и IBExpert, и оба отметили ошибку. Поскольку ни один из моих скриптов не имел команды set term и работал нормально в обоих случаях, я предположил, что у меня не будет проблем с функциями PSQL. Я никогда не использовал их раньше до сих пор. Я написал другие функции без установленного термина, которые нормально работали с Eclipse (но не со старой версией IBExpert). такая команда. Кстати, Flamerobin всегда требует установленного срока   -  person alvaroc    schedule 18.12.2020