程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> IBM InfoSphere Federation Server V9.7 中 DECFLOAT 數據類型及相關語義支持

IBM InfoSphere Federation Server V9.7 中 DECFLOAT 數據類型及相關語義支持

編輯:DB2教程

DB2 9.7 提供了許多新的 SQL 功能:包括新的 SQL 數據操縱語句,以及 DECFLOAT(十進制浮點小數)、NUMBER、VARCHAR2 和 TIMPSTAMP 等新的數據類型在 IBM InfoSphere Federation Server 上的應用。本文主要是介紹一下 IBM InfoSphere Federation Server 對十進制浮點數(DECFLOAT)的支持。

DECFLOAT 簡介

DECFLOAT 是 DB2 9.5 引入的一種新的數據類型,它是一種十進制浮點數據類型,適合處理精確的十進制業務數據。浮點數據類型例如 REAL 和 DOUBLE 類型都只是通過二進制近似方式來處理十進制數據,所以它們不適合大部分使用十進制數據的商業應用。

DECFLOAT 合並了 DECIMAL 類型的精度和 FLOAT 類型的一些性能優勢,所以它是一種結果精確而且處理高效的數據類型。

DECFLOAT 提供 16 位和 34 位兩種精度的浮點數據類型。分別為表示為 DECFLOAT(16) 和 DECFOAT(34)。如果沒有指明精度,DECFLOAT 默認為 DECFLOAT(34)。這兩種精度的數據分別存儲在 8 字節和 16 字節的空間裡。


表 1. DECFLOAT 類型數據表示范圍

精度(位) 長度(字節) 范圍 16 8 -9.999999999999999 x 10384to -1.0 x 10-383:
1.0 x 10-383to 9.999999999999999 x 10384 34 16 -9.999999999999999999999999999999999 x 106144to -1.0 x 10-6143:
1.0 x 10-6143to 9.999999999999999999999999999999999 x 106144

DECFLOAT 使用

下面通過一些例子,簡單地描述以下 DECFLOAT 類型的基本用法。我們首先創建一個包含 DECFLOAT 類型的表,往表中插入一些數據。

 CREATE TABLE EMPLOYEE 
 ( 
 SALARY   DECFLOAT, 
 BONUS   DECFLOAT(16), 
 COMMISSION DECFLOAT(34) 
 ); 
 INSERT INTO EMPLOYEE VALUES 
 ( 
 1234567890123456789, 
 12345678901234, 
 1234567890123456789012345678901 
 ); 
 SELECT * FROM EMPLOYEE;

SALARY BONUS COMMISSION 1234567890123456789 12345678901234 1234567890123456789012345678901

在 DB2 9.5 之前,我們最多只能往數據庫中插入由 DECIMAL 類型支持的 31 位長的浮點數據。然而,由於 DB2 9.5 引入了 DECFLOAT 數據類型,我們可以插入超過 31 位長的浮點數據。

 DELETE FROM EMPLOYEE; 
 INSERT INTO EMPLOYEE VALUES 
 ( 
 1234567890123456789, 
 DECFLOAT('1234567890123456789012345678902'), 
 DECFLOAT('1234567890123456789012345678901234') 
 ); 
 SELECT * FROM EMPLOYEE;

SALARY BONUS COMMISSION 1234567890123456789 1.234567890123457E+30 1234567890123456789012345678901234

注:由於 DECFLOAT(16) 類型沒有足夠的位來顯示整個數據,BONUS 列的數據采用指數類型表示。

DECFLOAT(16) 占用 8 字節空間而 DECFLOAT(34) 占用 16 字節空間。DEC(31,0) 占用的空間必須在軟件層面計算出來,而 DECFLOAT 在硬件層面就已經潛在地表示為 16 字節數據。

TBNAME NAME COLTYPE LENGTH SCALE EMPLOYEE BONUS DECFLOAT 8 0 EMPLOYEE COMMISSION DECFLOAT 16 0 EMPLOYEE SALARY DECFLOAT 16 0

我們再通過下面這個例子來說明 DECFLOAT 類型和 DECIMAL 類型的不同。

 DROP TABLE EMPLOYEE; 
 CREATE TABLE EMPLOYEE 
 ( 
 SALARY   DEC(14,2), 
 BONUS   DECFLOAT(16), 
 COMMISSION DECFLOAT(34) 
 ); 
 INSERT INTO EMPLOYEE VALUES 
 ( 
 123456.78, 
 1234567890.12, 
 123456789012345678901234.56 
 ); 
 SELECT * FROM EMPLOYEE;

SALARY BONUS COMMISSION 123456.78 1234567890.12 123456789012345678901234.56

如果我們插入精度更大的數據,對於 BONUS 和 COMMISSION 這兩列,我們不需要作任何更改,而對於 SALARY 列,那就需要修剪數據使得數據符合 DECIMAL 列指明的精度。

 INSERT INTO EMPLOYEE VALUES 
 ( 
 123456.7891, 
 1234567890.1234, 
 123456789012345678901234.5678 
 ); 
  
 SELECT * FROM EMPLOYEE;

SALARY BONUS COMMISSION 123456.78 1234567890.1234 123456789012345678901234.5678

DECFLOAT 捨入模式

DECFLOAT 數據類型允許使用不同形式的捨入模式(rounding)。捨入模式是指當數據值超過數據類型的精度時,應該如何捨入數據。DB2 通過 decflt_rounding 配置參數來控制捨入模式,這是在數據庫級上實現的。一個應用程序是無法改變捨入模式的,但是可以通過 CURRENT DECFLOAT ROUNDING MODE 命令來查詢當前的捨入模式。

DB2 支持五種符合 IEEE 標准的十進制浮點數捨入模式。捨入模式指定在計算結果超過精度時如何捨入結果。所有捨入模式的定義如下所示:

ROUND_CEILING

向正無窮大方向捨入。如果刪除的所有位都是零,或者符號為負號,那麼結果不變。 否則,結果系數應增加 1(向上捨入)。12.456 和 12.451 捨入後為 12.46。

ROUND_DOWN

朝著 0 的方向捨入(截斷),忽略被廢棄的位。12.456 和 12.451 捨入後為 12.45。

ROUND_FLOOR

向負無窮大方向捨入。如果刪除的所有位都是零,或者符號為正號, 那麼結果不變。否則,如果符號為負號,那麼結果系數應增加 1。12.456 和 12.451 捨入後為 12.45。 和 ROUND_DOWN 不同的是,對於負數例如 -12.456,捨入後為 -12.46,而 ROUND_DOWN 模式捨入後為 -12.45。

ROUND_HALF_EVEN

捨入為最接近的整數。如果向上捨入與向下捨入是等距的,那麼按照使得最後一位為偶數的目標來進行捨入;如果被廢棄的位大於它左邊位置中值 1 的一半(0.5),那麼結果系數應增加 1(向上捨入);如果它們小於一半,那麼不會調整結果系數,即忽略被廢棄的位。否則,如果結果系數最右邊的一位是偶數,在它們表示剛好一半的情況下,結果系數不會改變;如果結果系數最右邊的一位是奇數,那麼結果系數應增加 1(向上捨入),以使它變成偶數位。根據 IEEE 十進制浮點數規范,此捨入模式是缺省捨入模式,並且它是 DB2 產品中的缺省捨入模式。12.456 捨入後為 12.46。12.445 捨入後為 12.44。

ROUND_HALF_UP

捨入為最接近的整數。如果向上捨入與向下捨入是等距的,那麼向上捨入並使結果系數增加 1;如果被刪除的位大於或等於它左邊位置中值 1 的一半(0.5),那麼結果系數應增加 1(向上捨入)。否則,將忽略被刪除的位(小於或等於 0.5)。12.456 捨入後為 12.46,12.451 捨入後為 12.45。

如果沒有特別的設置指明,DB2 默認的捨入模式為 ROUND_HALF_EVEN。


表 2. DECFLOAT 類型數據在不同捨入模式下的結果
捨入模式 12.341 12.345 12.349 12.355 -12.345 ROUND_CEILING 12.35 12.35 12.35 12.36 -12.34 ROUND_FLOOR 12.34 12.34 12.34 12.35 -12.35 ROUND_HALF_UP 12.34 12.35 12.35 12.36 -12.35 ROUND_HALF_EVEN 12.34 12.34 12.35 12.36 -12.34 ROUND_DOWN 12.34 12.34 12.34 12.35 -12.34

Federation DECFLOAT 支持

前面我們說過 DB2 v9.5 引入了 DECFLOAT 這種新的數據類型。而後 IBM InfoSphere Federation Server v9.7 也引入 DECFLOAT 數據類型,使得 DECFLOAT 可以支持聯邦數據庫環境。這就意味著,當遠程數據庫中有一個 DECFLOAT 數據,在聯邦數據庫環境下,本地數據庫也有一個 DECFLOAT 數據與之相對應,可以實現遠程的與本地的 DECFLOAT 類型的數據映射。因此,我們通過 IBM InfoSphere Federation Server 來透明地訪問和控制遠程 DECFLOAT 類型的數據。

IBM InfoSphere Federation Server v9.7 對於 DECFLOAT 的支持只適用於遠程數據庫為 DB2 LUW V9.5 及以上版本和 Oracle 的應用情況。

Federation DECFLOAT 使用

由於 IBM InfoSphere Federation Server 支持 DECFLOAT 數據類型,因此我們可以在包含 DECFLOAT 類型的遠程對象(表或是視圖)上創建昵稱(NICKNAME)。例如,假設在遠程創建下列 DB2/LUW 表:

創建一個包含 16 位 DECFLOAT 類型列的表:

 CREATE TABLE T1 (c1 DECFLOAT(16))

創建一個包含 34 位 DECFLOAT 類型列的表:

 CREATE TABLE T1 (c1 DECFLOAT(34)) or CREATE TABLE T1 (c1 DECFLOAT)

在 IBM InfoSphere Federation Server 上,用戶可以基於上面的表創建相對應的昵稱:

創建基於 16 位 DECFLOAT 類型列的遠程表的昵稱 N1:

 CREATE NICKNAME N1 FOR SERVER.SCHEMA.T1

創建基於 34 位 DECFLOAT 類型列的遠程表的昵稱 N1:

 CREATE NICKNAME N2 FOR SERVER.SCHEMA.T2

一旦創建了昵稱,那就可以對包含 DECFLOAT 類型的昵稱進行昵稱所允許的任何 SQL 操作。

昵稱(Nickname)

創建基於 DECFLOAT 數據的昵稱

 CREATE TABLE t1 (c1 DECFLOAT); 
 CREATE NICKNAME N1 for server.schema.t1;

Transparent DDL

 CREATE TABLE N1 (c1 DECFLOAT) 
 OPTIONS(REMOTE_SERVER server_name, REMOTE_SCHEMA server_schema) 
 OR 
 CREATE TABLE N1 (c1 DECFLOAT(34)) 
 OPTIONS(REMOTE_SERVER server_name, REMOTE_SCHEMA server_schema) 
 
 CREATE TABLE N1 (c1 DECFLOAT(16)) 
 OPTIONS(REMOTE_SERVER server_name, REMOTE_SCHEMA server_schema) 

Alter Nickname Alter Column

 ALTER NICKNAME N1 ALTER COLUMN C1 LOCAL TYPE DECFLOAT

如果你改變一個列的數據類型,必須改為數據源相對應列的數據類型相兼容的數據類型。否則改為不兼容的類型將導致系統報錯。例如,一個用戶將類型為 DATE 的遠程數據列的本地類型改為 DECFLOAT,系統就會報出 SQL1357N 的錯。

 ALTER NICKNAME N1 ALTER COLUMN C1 LOCAL TYPE DECFLOAT 
 DB21034E The command was processed as an SQL statement because it was not a valid 
 Command Line Processor command. During SQL processing it returned: 
 SQL1357N The specifIEd data type is invalid as the local data type for a data type 
 mapping from a data source. Reason code = "3". Altering the local type to the 
 specifIEd data type is not allowed. SQLSTATE=42815

類型映射(Type Mapping)

IBM InfoSphere Federation Server 會為 DECFLOAT 類型提供一組默認的類型映射。下面的表格列出了 DECFLOAT 可用的一些類型映射:


表 3. DECFLOAT 類型映射
遠程類型名 遠程精度 本地映射類型 本地映射精度 DECFLOAT 16 DECFLOAT 16 DECFLOAT 34 DECFLOAT 34

以上表所示的類型映射是適用於遠程數據源為 DB2 LUW V9.5 及以上版本的應用情況,而對於遠程數據源為 ORACLE 的情況,由於 ORACLE 沒有 DECFLOAT 類型,而有 NUMBER 數值類型,所以我們采用 ALTER NICKNAME ALTER COLUMN TYPE 為 DECFLOAT 類型的方式,也就是將 ORACLE NUMBER 類型的默認本地映射類型更改為 DECFLOAT 的方式來支持本地 DECFLOAT 與 Oracle NUMBER 的類型映射。

用戶可以通過 CREATE TYPE MAPPING 和 CREATE NICKNAME 語句來改變默認的類型映射。

創建一個 Forward 類型映射:

 CREATE TYPE MAPPING TM1 FROM LOCAL TYPE DECFLOAT TO SERVER TYPE db2/cs 
 REMOTE TYPE SMALLINT

創建一個昵稱 N1:

 CREATE NICKNAME N1 FOR SERVER.SCHEMA.T1

創建昵稱後,系統會自動將遠程 SMALLINT 類型在本地映射成 DECFLOAT 類型。注意:當我們在本地昵稱 N1 上插入一個超過 SMALLINT(-32,768 到 +32,767) 范圍的值時,系統會返回一個 SQL0413N 的錯,指明插入的值溢出。

同理,用戶可以創建一個 Reverse 類型映射:

 CREATE TYPE MAPPING TM2 FROM SERVER TYPE db2/cs REMOTE TYPE DECFLOAT 
 TO LOCAL TYPE SMALLINT

同樣創建一個昵稱 N2:

 CREATE NICKNAME N2 FOR SERVER.SCHEMA.T2

創建昵稱後,系統會自動將遠程 DECFLOAT 類型在本地映射成 SMALLINT 類型。注意:當我們在本地昵稱 N2 上插入一個超過 SMALLINT(-32,768 到 +32,767) 范圍的值時,系統會返回一個 SQL0413N 的錯,指明插入的值溢出。

另外,前面我們說過,用戶也可以通過 ALTER NICKNAME 語句來改變默認的類型映射。

 ALTER NICKNAME N2 ALTER COLUMN C1 LOCAL TYPE SMALLINT

更改昵稱後,系統會自動將遠程 DECFLOAT 類型在本地映射成 SMALLINT 類型。注意:當我們在本地昵稱上插入一個超過 SMALLINT(-32,768 到 +32,767) 范圍的值時,系統同樣會返回一個 SQL0413N 的錯,指明插入的值溢出。

函數映射(Function Mapping)

我們在 IBM InfoSphere Federation Server v9.7 中更新了下列函數的函數映射,因此它們可以支持 DECFLOAT 數據類型。

聚集函數 (Aggregate Functions)

AVG (sysibm)

CORRELATION (sysibm)

COUNT (sysibm)

COUNT_BIG (sysibm)

COVARIANCE (sysibm)

GROUPING (sysibm)

MAX (sysibm)

MIN (sysibm)

Regression functions (sysibm)

STDDEV (sysibm)

SUM (sysibm)

VARIANCE (sysibm)

標量函數(Scalar Functions)

BIGINT (sysibm)

DATE (sysibm)

DECIMAL (sysibm)

DOUBLE (sysibm) (sysfun)

FLOAT (sysibm)

INTEGER (sysibm)

REAL (sysibm)

SMALLINT (sysibm)

ABS or ABSVAL (sysibm)

CHAR (sysibm) (sysfun)

EXP (sysfun)

LN (sysfun)

LOG (sysfun)

LOG10 (sysfun)

MOD (sysfun)

POWER (sysfun)

ROUND (sysibm) (sysfun)

SQRT (sysfun)

CEILING or CEIL (sysibm) (sysfun)

COALESCE (sysibm)

DEGREES (sysfun)

FLOOR (sysibm) (sysfun)

HEX (sysibm)

LENGTH (sysibm)

NULLIF (sysibm)

RADIANS (sysfun)

SIGN (unknown)

TRUNCATE or TRUNC (sysibm) (sysfun)

VALUE (sysibm)

另外,我們還在 IBM InfoSphere Federation Server 中加入一些函數映射,用以支持 DECFLOAT 數據類型:

DECFLOAT

QUANTIZE

TOTALORDER

COMPARE_DECFLOAT

NORMALIZE_DECFLOAT

因此,我們可以使用上述函數來對 DECFLOAT 數據進行查詢:

 SELECT C1, QUANTIZE(C1, DECFLOAT(0.01)) QUANT FROM N1

對於上述這個例子,假設本地聯邦數據庫和遠程數據源具有相同捨入模式,那麼整個 SQL 語句都將會被下推到遠程數據源執行。

索引(Index)

IBM InfoSphere Federation Server v9.7 對於 DECFLOAT 的支持同樣體現在聯邦數據庫環境下創建索引上。例如,遠程數據源有表 T1,T2,並有索引 IDX1,IDX2。

 CREATE TABLE T1 (C1 DECFLOAT(16)) 
 CREATE INDEX IDX1 ON T1(C1) 
 CREATE TABLE T2 (C1 DECFLOAT) 
 CREATE INDEX IDX2 ON T2(C1)

在 T1,T2 上創建昵稱,同時本地聯邦數據庫服務器就取得了昵稱對應的遠程表的相關信息,包括遠程索引信息。但是當創建昵稱後昵稱相應的遠程表上的索引被更改了或者是昵稱是基於遠程視圖的情況下,那就可以在昵稱上創建索引,並使用 SPECIFICATION ONLY 指明索引規范,以便 IBM InfoSphere Federation Server 優化器利用索引提高效率。

 CREATE INDEX NIDX1 ON NICK1(C1) SPECIFICATION ONLY 
 CREATE INDEX NIDX2 ON NICK2(C2) SPECIFICATION ONLY

視圖(VIEw)

在 IBM InfoSphere Federation Server v9.7 中,我們可以通過 CREATE VIEW 語句在昵稱上創建視圖,且昵稱中含有 DECFLOAT 類型列。

在昵稱 N1 上創建視圖 V1,N1 中的列 C1 是 DECFLOAT 類型:

 CREATE VIEW V1 AS SELECT * FROM N1 WHERE C1 > 10000.0; 
 SELECT * FROM V1;

另外,可以在遠程數據源上的表 T2 上創建視圖 V2:

 CREATE TABLE T2 (C1 DECFLOAT); 
 CREATE VIEW V2 AS SELECT * FROM T2 WHERE C1 > 10000.0;

然後在本地聯邦數據庫服務器上對 V2 創建昵稱 N2:

 CREATE NICKNAME N2 FOR SERVER.SCHEMA.V2; 
 SELECT * FROM N2;

存儲過程(Stored Procedure)

在 IBM InfoSphere Federation Server v9.7 中,我們可以創建存儲過程,用於訪問和控制 DECFLOAT 類型數據,這主要有以下兩種應用情況:

只使用 IN 和 OUT 參數,並且沒有結果輸出的存儲過程:

在遠程數據源上創建包含 DECFLOAT 類型列的表:

 DROP TABLE SP@ 
 CREATE TABLE SP( 
 PARAM CHAR(1), 
 COLDFP DECFLOAT)@

在遠程數據源上創建使用 IN 和 OUT 參數的存儲過程 SP_DFP_IO,使用輸入參數 ARGI 來更新遠程表 SP,並查詢 SP,將得到的結果賦值給輸出參數 ARGO:

 CREATE PROCEDURE SP_DFP_IO (IN ARGI DECFLOAT, OUT ARGO DECFLOAT) 
    LANGUAGE SQL 
 BEGIN 
  UPDATE SP 
     SET COLDFP = ARGI 
     WHERE PARAM = 'I'; 
  SELECT COLDFP 
  INTO ARGO 
  FROM SP 
  WHERE PARAM = 'O'; 
 END@

在 IBM InfoSphere Federation Server 上創建基於遠程數據源上的存儲過程的過程 PROCEDURE:

 CREATE PROCEDURE SP_DFP_IO SOURCE SCHEMA.SP_DFP_IO FOR SERVER S1@

在本地聯邦數據庫服務器上調用存儲過程 SP_DFP_IO:

 CALL SP_DFP_IO (50.125,?)

沒有使用輸入輸出參數,並且有結果返回的存儲過程:

在遠程數據源上創建包含 DECFLOAT(16) 類型列的表:

 DROP TABLE SP16@ 
 CREATE TABLE SP16( 
 PARAM CHAR(1), 
 COLDFP DECFLOAT(16))@

在遠程數據源上創建存儲過程 SP_DFP_RS,沒有使用輸入參數,並返回結果:

 CREATE PROCEDURE SP_DFP_RS() DYNAMIC RESULT SETS 1 
 LANGUAGE SQL 
 READS SQL DATA 
 BEGIN 
   BEGIN DECLARE clientcur CURSOR WITH RETURN TO CLIENT 
   FOR SELECT * 
   FROM SP16; 
   OPEN clIEntcur; 
 END; 
 END

在本地聯邦數據庫服務器上創建基於遠程數據源上的存儲過程的過程 PROCEDURE: CREATE PROCEDURE SP_DFP_RS SOURCE SCHEMA.SP_DFP_RS FOR SERVER S1 WITH RETURN TO CLIENT ALL

在本地聯邦數據庫服務器上調用存儲過程 SP_DFP_RS:

 CALL SP_DFP_RS ()



Federation DECFLOAT 捨入模式

由於 DECFLOAT 數據類型支持五種符合 IEEE 標准的十進制浮點數捨入模式,在 IBM InfoSphere Federation Server v9.7 中,如果遠程數據源有 DECFLOAT 類型數據且本地服務器會對遠程 DECFLOAT 數據進行查詢和計算的情況下,為了在本地服務器和遠程數據源間獲得一致性結果,我們引入一個新的 Server Option:SAME_DECFLT_ROUNDING,用於指明遠程數據源和本地聯邦數據庫服務器是否具有相同的捨入模式。 SAME_DECFLT_ROUNDING 有兩個有效值:

'Y' : 指明遠程數據源和本地聯邦數據庫服務器的捨入模式相同。

'N' : 指明遠程數據源和本地聯邦數據庫服務器的捨入模式不同。

SAME_DECFLT_ROUNDING 的默認值為’ N ’。也就是說,如果 SAME_DECFLT_ROUNDING 沒有被重設,那麼我們認為本地服務器和遠程數據源之間的捨入模式是不同的。這是一種比較保守的方式,這樣可以使得一些受捨入模式影響的操作不被下推到遠程數據源執行,從而保證結果的准確性。

如果遠程數據源的捨入模式和本地聯邦數據庫服務器的捨入模式不同,DECFLOAT 類型數據的計算結果超過定義的 DECFLOAT 類型的精度時,那麼有關 DECFLOAT 數據計算的操作就不能夠下推到遠程數據源進行處理。反之,如果兩者的捨入模式相同,為了提高本地聯邦數據庫訪問和操作遠程 DECFLOAT 數據的效率,可以采用兩種方式來設置 SAME_DECFLT_ROUNDING:

在 CREATE SERVER 時指定 SAME_DECFLT_ROUNDING 值為’ Y ’

創建一個 SERVER S1,指明為相同的捨入模式。

 CREATE SERVER S1 TYPE DB2/CS VERSION 10 WRAPPER W1 AUTHORIZATION "AUTHID" PASSWord "PWD" 
 OPTIONS (DBNAME 'DBNAME', SAME_DECFLT_ROUNDING ‘ Y ’ ); 

通過 ALTER SERVER 語句來重設 SAME_DECFLT_ROUNDING 為’ Y ’。

創建一個 SERVER S1,指明為不同的捨入模式。

 CREATE SERVER S1 TYPE DB2/CS VERSION 10 WRAPPER W1 AUTHORIZATION "AUTHID" PASSWord "PWD" 
 OPTIONS (DBNAME 'DBNAME', SAME_DECFLT_ROUNDING ‘ N ’ );

修改 S1 的設置,重設捨入參數,指明為相同的捨入模式。

 ALTER SERVER S1 OPTIONS (SET SAME_DECFLT_ROUNDING ‘ Y ’ );

如果使用除’ Y ’或’ N ’之外的無效值來設置 SAME_DECFLT_ROUNDING,系統會返回一個 SQL1882N 的錯誤信息。

 ALTER SERVER S1 OPTIONS (SET SAME_DECFLT_ROUNDING 'B') 
 DB21034E The command was processed as an SQL statement because it was not a valid 
 Command Line Processor command. During SQL processing it returned: 
 SQL1882N The "SERVER" option "SAME_DECFLT_ROUNDING" cannot be set to "B" for "S1".  
 SQLSTATE=428EF

注意:設置 SAME_DECFLT_ROUNDING 為’ Y ’的用戶必須為這個操作所導致的後果負責。如果本地服務器和遠程數據源間實際的捨入模式不同,那麼重置操作將導致得到不准確的結果。

結束語

我們在聯邦數據庫環境下引入 DECFLOAT 數據類型的支持,使得 IBM InfoSphere Federation Server 可以透明訪問和操作遠程的 DECFLOAT 數據類型。具體功能概括如下:

使用 DB2 提供 16 位和 34 位兩種精度的 DECFLOAT 浮點數據類型,進一步增強了 IBM InfoSphere Federation Server 精確處理的十進制浮點數據的能力,並且大大提高計算十進制浮點數據的性能。

對於遠程的 16 位和 34 位兩種精度的 DECFLOAT 浮點數據類型的表和視圖,IBM InfoSphere Federation Server 可以通過創建昵稱,作相應的類型映射和函數映射,來透明地訪問和操作遠程的 DECFLOAT 類型數據,並最大化地提高 DECFLOAT 數據查詢的效率。

提供對 DECFLOAT 類型數據捨入模式的控制,使得 IBM InfoSphere Federation Server 在處理本地和遠程的 DECFLOAT 數據時,捨入操作得到的結果一致。

總之,上述功能使得 IBM InfoSphere Federation Server 處理本地和遠程數據源上的 DECFLOAT 數據的交互變為可能,並且更為簡單快捷。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved