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

Der*_*rek 3 rpgle ibm-midrange

这是我的情况:我的程序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时,我得到一个十进制数据错误.

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

ASa*_*zar 5

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

如果您确实需要从文件字段中选择Like,请定义一个虚拟数据结构以保持其分区.

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

这是一篇关于在程序原型和自动转换中使用Const 的非常好的文章.