1

状態を示すセマフォとして大きな Java double 値 (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

明らかに、これを機能させるには、バイナリ double への文字列変換を使用する必要があります。

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 に答える