我正在移植一个使用大型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
答案 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行。