在早期的数据库版本中,没有获取随机数的函数,为此,提供如下几种方式,仅供测试参考,具体使用请联系gbase8s官方技术支持
--简单的线性同余生成器(LCG)的变种
drop function if exists ff1;
create function ff1() returning intdefine a int;
let a= DBINFO('utc_current');
let a= (IFX_BIT_RIGHTSHIFT(a,5)) + (IFX_BIT_LEFTSHIFT(a,7));
let a= BITAND(a,2147483647); --& 0x7FFFFFFF; // 取低31位作为结果,避免符号位影响
let a=mod(a,101); --将结果映射到[0,100]区间
return a;
end function;--XORSHIFT算法
drop function if exists ff2;
create function ff2() returning intdefine a int;
let a=DBINFO('utc_current');
let a= BITXOR(a,IFX_BIT_LEFTSHIFT(a,13));
let a= BITXOR(a,IFX_BIT_RIGHTSHIFT(a,7));
let a= BITXOR(a,IFX_BIT_LEFTSHIFT(a,17));
let a= BITAND(a,2147483647);
let a=mod(a,101);return a;
end function;--简单的位移运算
drop function if exists ff3;
create function ff3() returning int
define a int;
let a=DBINFO('utc_current');
let a=BITXOR(BITXOR(IFX_BIT_LEFTSHIFT(a,13),IFX_BIT_RIGHTSHIFT(a,9)),IFX_BIT_LEFTSHIFT(a,5));
let a= BITAND(a,2147483647);
let a=mod(a,101);
return a;
end function;