Ibm midrange 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 如果E K磁盘USROPN,则为Fmfile d grue s like(dhseqn) D C*入口PLIST 帕姆格鲁酒店 c开放式文件 c***用grue做点什么 c关闭文件 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+) *RNF7031 DHSEQN P(2,0)000200 1000002D GRUE P(2,0)000200D 000500M 000700000800m 基于(_QRNL_PRM+) 当我用一个声明为2,0s的参数调用程序A时,我得到一个十进制数据错误 这是预期的,还是一个编译器错误?RPG编译器(甚至在ILE之前)将数据库字段转换为压缩字段。有时您会发现它不是,例如,如果在数据结构中使用分区文件字段,它将保持分区状态,但不使用的同一文件的每个分区字段都将打包 如果您确实需要从文件字段中选择,请定义一个虚拟数据结构以保持分区 更好的是,如果您的输入参数没有被修改,那么在程序的原型中用Const关键字定义它,类型将自动转换,甚至接受表达式和常量Ibm midrange RPG编译器将类型S转换为类型P?,ibm-midrange,rpgle,Ibm Midrange,Rpgle,以下是我的情况: 我有一个程序,看起来像这样: Fmfile IF E K DISK USROPN d grue s like(dhseqn) d C *ENTRY PLIST C PARM grue c open mfile c*** do something
关于在过程原型和自动转换上使用Const,这里有一个非常好的方法。grue定义中的“s”并不指数据类型,而是将其定义为“独立”字段。grue的数据类型被指定为LIKE(dhseqn),编译列表显示为P(2,0)。真正的问题是“当数据库显示为S时,为什么dhseqn显示为P?”。(ASalazar提供了答案)@Derek RPG参考在这一点上非常不清楚,只是在没有指定LIKE关键字时定义了
:
,这意味着使用LIKE()时会有所不同。然而,在这种情况下实际上也是一样的。