下面是我的情况: 我有节目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+)

和当我打电话节目A与已经被声明为2,0 S上参数,我得到一个十进制数据错误。

时此预期,或这是一个编译器错误?

有帮助吗?

解决方案

在RPG编译器(甚至在ILE)转换数据库字段包装。有时你会发现它并没有,例如,一个分区文件字段将保持如果您在数据结构中使用它划,但是同一个文件的每一个分区字段,你不要将成为包装。

如果你真的从文件字段需要像,定义了一个虚拟数据结构来保持它划。

更好的是,如果输入参数没有被修改,在该程序的原型用const关键字定义它和类型将被自动地转换,即使接受的表达式和常量!

下面是一个很好的文章关于过程原型和自动转换中使用const。

其他提示

的“s”中绿蓝的定义并不是指的数据类型,而是将其定义为“独立”字段。对于绿蓝数据类型被指定为LIKE(dhseqn),其你的编译列表显示为P(2,0)。

scroll top