2010-06-11 22 views
3

這裏是我的情況:我 有看起來像這樣的程序答:RPG編譯器將S型轉換爲P型?

 
Fmfile  IF E   K DISK USROPN 
d grue   s     like(dhseqn) 
d 
C  *ENTRY  PLIST 
C     PARM     grue 
c     open  mfile 
c*** do something with grue 
c     close  mfile 
c     eval  *inlr = *on 

dhseqn是2,0 S區域。

的編譯清單顯示我:

 
*RNF7031 DHSEQN   P(2,0)     000200  1000002D 
      GRUE    P(2,0)     000200D  000500M  000700  000800M 
          BASED(_QRNL_PRM+) 

當我調用程序的與已被宣佈爲2,0 S上的參數,我得到一個十進制數據錯誤。

這是預期的,還是這是一個編譯器錯誤?

回答

5

RPG編譯器(甚至在ILE之前)將數據庫字段轉換爲打包。有時候你會發現它沒有,例如,如果你在一個數據結構中使用它,分區的文件字段將保持分區,但是你不會打包的同一個文件的每個分區字段。

如果您確實需要從文件字段中選擇Like,請定義一個虛擬數據結構以使其分區。

更好的是,如果你的入口參數沒有修改,用Const關鍵字在程序的原型中定義它,類型將自動轉換,甚至接受表達式和常量!

下面是關於在程序原型和自動轉換上使用Const的非常好的article

0

grue定義中的's'並不是指數據類型,而是將其定義爲'獨立'字段。 grue的數據類型被指定爲LIKE(dhseqn),您的編譯列表顯示爲P(2,0)。

+0

真正的問題是'爲什麼DHSEQN顯示爲P,當數據庫顯示爲S?'時。 (ASalazar提供了答案) – Derek 2010-07-05 14:48:45

+0

@Derek RPG引用在這一點上很不清楚,只定義了'沒有指定LIKE關鍵字時',暗示使用LIKE()時的差異。但是,在這種情況下實際上也是如此。 – user2338816 2015-09-02 11:43:26