这是我的情况: 我的程序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时,我得到一个十进制数据错误。
这是预期的,还是编译错误?
答案 0 :(得分:5)
RPG编译器(甚至在ILE之前)将数据库字段转换为打包。有时您会发现它没有,例如,如果您在数据结构中使用它,则分区文件字段将保持分区状态,但是您不会对同一文件的每个分区字段进行打包。
如果你真的需要从文件字段中喜欢,请定义一个虚拟数据结构以保持其分区。
更好的是,如果您的入口参数未被修改,请使用Const关键字在程序的原型中定义它,并且类型将自动转换,甚至接受表达式和常量!
关于在程序原型和自动转换中使用Const,这是一个非常好的article。
答案 1 :(得分:0)
grue定义中的's'不是指数据类型,而是将其定义为“独立”字段。 grue的数据类型指定为LIKE(dhseqn),您的编译列表显示为P(2,0)。