如何将mysql的函数翻译成firebird?

dluptydi  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(465)

如何将此函数传递给firebird

create function `candidat`(in_num   decimal(10,2),
                           in_group integer unsigned)   
       returns integer unsigned 
       deterministic   
       language sql 
begin   
   return case in_group when 1 then floor(in_num / 3.0 + 0.99)
                        when 2 then floor(in_num / 3.0 + 0.50)
                               else floor(in_num / 3.0) end; 
end
vmjh9lq9

vmjh9lq91#

有3种方法可以提取您需要的数据:
在sql中添加案例:

select
   case when :in_group = 1 then floor(:in_num / 3.0 + 0.99)
        when :in_group = 2 then floor(:in_num / 3.0 + 0.50)
        else floor(:in_num / 3.0) end
from
   RDB$DATABASE

obs:the RDB$DATABASE 它只是一个表示例de result,而“:in_num”和“:in_group”是一个变量/参数,您可以用一个表的列来更改它,也可以只注入您需要的值
创建如下过程:

SET TERM ^ ;

CREATE OR ALTER procedure candidat (in_num decimal(10,2), in_group integer)
   returns ( calculed_value integer )
as
begin
  if (:in_group = 1) then
  begin
    calculed_value = floor(:in_num / 3.0 + 0.99);
  end
  else if (:in_group = 2) then
  begin
    calculed_value = floor(:in_num / 3.0 + 0.50);
  end
  else
  begin
    calculed_value = floor(:in_num / 3.0);
  end

  suspend;
end
^

SET TERM ; ^

你可以像这样使用它:

select 
   CALCULED_VALUE 
from 
   candidat( 100, 2)

您可以使用c++之类的语言创建库(udf),该语言生成 .dll 欧点 .so (对于linux)具有 candidat 然后将其添加到数据库中。
为此,您可以查看https://www.firebirdsql.org/en/writing-udfs-for-interbase/
然后可以使用自定义项,如:

select
  candidat(1,3)
from
  <TABLE>
0kjbasz6

0kjbasz62#

您可以创建firebird3psql函数,它与mysql函数几乎相同。主要区别在于创建语法:

create function candidat(in_num   decimal(10,2),
                         in_group integer)   
       returns integer
as
begin   
   return case in_group when 1 then floor(in_num / 3.0 + 0.99)
                        when 2 then floor(in_num / 3.0 + 0.50)
                               else floor(in_num / 3.0) end; 
end

因为firebird没有无符号整数,所以需要使用正规的(有符号的) integer 相反。给定的输入应该足够,否则考虑切换到 bigint .

相关问题