1

我正在移植一个使用大型 Java 双精度值 (MAX-1d = +1.7976931348623155E308) 作为信号量来指示条件的应用程序。我无法弄清楚如何定义列以接受此值而不产生错误:ORA-01426:数字溢出。我尝试了 FLOAT 的各种精度(直到 126),以及 DOUBLE_PRECISION 和 BINARY_DOUBLE,并尝试使用 TO_BINARY_DOUBLE 的触发器 - 都失败了。我用的是11g。DB2 接受 DOUBLE 作为数据类型并处理该值。

-- DDL for Table TEST (generated from specifying BINARY_DOUBLE for COLUMN1)

CREATE TABLE "DB2ADMIN"."TEST"
( "COLUMN1" BINARY_DOUBLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;

insert into test (column1) values (+1.7976931348623155E308);
ERROR at line 1:
ORA-01426: numeric overflow
4

1 回答 1

1

显然,我需要使用字符串转换为二进制双精度才能工作:

SQL> 插入测试 (column1) 值 (to_binary_double('1.7976931348623155E308'));

创建了 1 行。

SQL> select * from test where column1 = (to_binary_double('1.7976931348623155E308'));

第 1 列 1.798E+308

SQL> 从测试中删除 column1 > 0;

已删除 1 行。

于 2012-09-19T14:40:47.943 回答