2015-10-22 140 views
1

我有一個場景,我在as400(DB2)上的一個表格上用綠色屏幕上的SQL做了一個選擇,並且我使用windows SQL工具。Decimal Fields在來自IBM AS400的窗口上顯示負數

在AS400(DB2): enter image description here

通知的undrelined值40229和41158.在DB2側的場類型是DECIMAL 9.

現在當我在一個窗口運行相同的SQL

enter image description here

出於某種原因,當數據被返回-40229和-41158

:使用SQL工具(IBM(R)的Data Studio)PC

這感覺就像是一種溢出,但爲什麼和什麼?

當我瀏覽到從SQL工具的數據庫結構字段類型爲:

enter image description here

所以在AS400的字段類型是DECIMAL 9和從Windows方十進制9 ..

爲什麼在Windows上這是否定的?與該類型有關?

的SQL窗口:select * from maxdtaclb.szciexp where TCNUOR ='129444'

的SQL AS400:select * from maxdtaclb/szciexp where TCNUOR ='129444'

難道全選,其中值小於0拿到了11行結果...

enter image description here

同樣,如果我用綠色屏幕上的相同記錄的鍵進行選擇,它是負的?

東西我注意到的是,即使我用rpgiv程序從表中提取數據是在rpgiv程序藏漢負..

+0

我相信你可以在該工具中設置很多事物的格式,包括日期(你應該改爲使用'* ISO')。我認爲它也包含數字?我會先檢查一下。我們是否可以看到聲明?它只是這一套領域?它只是這一行(我們確定它是同一個,儘管看起來是這樣)?你確定你碰到同一張桌子嗎(沒有在會話中設置'* LIBL'或其他東西)? –

+0

這是完全相同的表和同一行受到影響。唯一奇怪的是,如果我選擇另一行的值是正確的(而不是負值),就像我的例子中那樣,它只是一些偏離它們而不正確。我將檢查* ISO格式.. – Renier

+0

一個正確的例子檢查我的as400的第一個圖像的值:18919在窗口顯示正確的一面,但40229顯示負面...這就是爲什麼我認爲像溢出? – Renier

回答

4

如果該文件是從DDS源部件(而不是一個SQL DDL CREATE TABLE語句)創建,它可以是可能的領域是使用EDTCDE關鍵字定義的。編輯代碼可用於控制如何在交互式會話的查詢輸出中顯示數字值。使用1,2,3或4的編輯碼將導致負號被抑制。如果在表達式中使用該字段,則SQL將生成派生列,該列不再由編輯代碼進行格式化。在DDS源構件

實例文件定義::

  R RDMC001P       
       NUMFLD1  5P 0  EDTCDE(3) 

例SQL會話:

> insert into dmclib/dmc001p   
    values (-12345)      
    1 rows inserted in DMC001P in DMCLIB. 
> select NUMFLD1 from dmclib/dmc001p   
    NUMFLD1 
    12345 
> select decimal(numfld1,5,0) as NUMFLD2 from dmclib/dmc001p  
    NUMFLD2 
    12,345- 

Here's a link到7.2 IBM手冊描述可用於EDTCDE DDS關鍵字碼。 (它適用於物理文件,即使標題提到了顯示文件。)

+3

Dang..forgot所有關於編輯代碼。另一個選擇是源是不可用的是使用'顯示文件字段描述 - (DSPFFD)'命令 – Charles

+0

哇我檢查了它使用DSPFFD和猜測什麼..這兩個字段被定義爲編輯代碼4巫婆意味着如果值實際上是負面的,那麼不要顯示標誌。謝謝分配!每天學習新事物。爲什麼會使用這個編輯代碼來創建一個表?如果價值是否定的,你會想知道? – Renier

+0

阿格。我在尋找這個關於_display files_(但不記得它叫什麼 - 我出去太久了)之前,注意到它是標準工具之一。 Shoulda一直在尋找... –

0

你用什麼工具來看看從綠屏的結果?我假設STRSQL。

鑑於3個工具(Data Studio/RPG)中的2個顯示爲負值,我會說這個值是負值。

有一點要嘗試,使用HEX()函數來查看數據的十六進制值。您應該看到「000040229D」爲負值或「000040229F」爲正值。

但是,'000040229B'是一個有效但很少使用的替代品。您使用的綠屏工具可能無法識別它。

但是,至少在我的系統(v7.1 TR 9)中,STRSQL至少會以負號正確顯示兩個版本的負值。
enter image description here