将+ 1.7976931348623155E308插入ORA-01426数字溢出列

时间:2012-09-19 14:27:48

标签: ora-01426

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

1 个答案:

答案 0 :(得分:1)

显然,我需要使用字符串转换为二进制double来实现此功能:

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

创建了一行。

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

COLUMN1 1.798E + 308

SQL>从test1中删除column1> 0;

删除1行。