RPG编译器将类型S转换为类型P?

时间:2010-06-11 17:00:57

标签: ibm-midrange rpgle

这是我的情况: 我的程序A看起来像这样:

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的参数调用程序A时,我得到一个十进制数据错误。

这是预期的,还是编译错误?

2 个答案:

答案 0 :(得分:5)

RPG编译器(甚至在ILE之前)将数据库字段转换为打包。有时您会发现它没有,例如,如果您在数据结构中使用它,则分区文件字段将保持分区状态,但是您不会对同一文件的每个分区字段进行打包。

如果你真的需要从文件字段中喜欢,请定义一个虚拟数据结构以保持其分区。

更好的是,如果您的入口参数未被修改,请使用Const关键字在程序的原型中定义它,并且类型将自动转换,甚至接受表达式和常量!

关于在程序原型和自动转换中使用Const,这是一个非常好的article

答案 1 :(得分:0)

grue定义中的's'不是指数据类型,而是将其定义为“独立”字段。 grue的数据类型指定为LIKE(dhseqn),您的编译列表显示为P(2,0)。