2012-09-19 14 views
1

我正在移植一個應用程序,該應用程序使用大的Java double值(MAX-1d = + 1.7976931348623155E308)作爲指示條件的信號量。我不知道如何定義列以接受此值而不會產生錯誤:ORA-01426:數字溢出。我嘗試過FLOAT的各種精度(高達126),DOUBLE_PRECISION和BINARY_DOUBLE,並嘗試使用TO_BINARY_DOUBLE的觸發器 - 全部失敗。我正在使用11g。 DB2接受DOUBLE作爲數據類型並處理這個值。在列中插入+ 1.7976931348623155E308 ORA-01426數值溢出

-- 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

移植從DB2 v9.7移植到Oracle 11g –

回答

1

顯然,我需要使用一個字符串轉換爲二進制雙爲此工作:

SQL>插入到測試(列1)的值(to_binary_double( '1.7976931348623155E308'));

1 row created。

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

COLUMN1 1.798E + 308

SQL>從測試刪除column1在> 0;

刪除1行。