暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

LightDB23.3新特性LightDB存储过程支持binary_float

原创 姚崇 2023-08-28
182

Oracle 的binary_float/binary_double 和lightdb 的 float4/float8 都遵循IEEE754 标准,在内存中保存的值相同,但在显示上有些不同。
比如:123456789012345678901234567890123456789,在内存上表示的都是1.2345678605116651e+38,但oracle 显示为1.23456786E38,lightdb 显示为1.2345679e+38(extra_float_digits 为默认值1,最短-精度格式shortest-decimal, 为0 则6位有效数字)。
这边不考虑此差异,直接使用float4 替代binary_float,float8替代binary_double。

1.Binary_float 对应float4 , binary_double 对应float8,Binary_float/binary_double 不支持type modifier(Binary_float(2) 这种格式), 可以通过create domain 实现。
在orafce实现, 新增版本3.24.

测试

create table tt(key1 binary_float, key2 binary_double);
insert into tt values(123456789012345678901234567890123456789,12345678901234567890123456789012345678901234567890);

// binary_float 溢出
Insert into tt values(1234567890123456789012345678901234567890, 12345678901234567890123456789012345678901234567890); 
Infinity
-Infinity
NaN
insert into tt values('Infinity', 12345678901234567890123456789012345678901234567890);
insert into tt values('-Infinity', 12345678901234567890123456789012345678901234567890);
insert into tt values('Nan', 12345678901234567890123456789012345678901234567890);

select * from tt;

create PROCEDURE test()
as $$
    tr_sql varchar2(100);
bf binary_float := 1.2;
bd binary_double :=1.2;
begin

tr_sql := 'create table t1(
	key1 binary_float default '|| bf ||',
    key2 binary_double default '|| bd ||'
	)';
  execute tr_sql;
end;
$$ language plorasql;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

目录
  • 测试