调用传递数组的外部程序时如何使用LIKE关键字

时间:2014-01-28 21:43:28

标签: ibm-midrange rpgle

我有以下RPGLE计划:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                              like(myarr)
d  somevar                            like(somevar)

d myarr           s             64a   dim(100)
d somevar         s             65a

/free
 callp mypgm(myarr: somevar);
 *inlr = *on;
/end-free

当我尝试在V6R1盒子上编译它时,我收到错误消息:

RNF5343 30      1 Array has too many omitted indexes; specification is ignored.

有些documentation告诉我:

  

RNF5343

     

数组有太多省略的索引;规范被忽略了。

     

30

     

原因。 。 。 。 。 :用作数组的省略索引数   赋值运算符右侧的操作数大于   指定为结果的数组的省略索引数   任务。

     

恢复。 。 。 :减少操作数的省略索引数;   或者增加结果的省略索引数。编   试。

这不是很有用,因为这是一个程序调用,而不是尝试分配一个值(比如EVAL语句或其他东西)。

如果我将外部程序调用的声明更改为:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                        64a   dim(100)
d  somevar                            like(somevar)

程序编译得很好。

那么如何将LIKE关键字与数组一起用于外部程序定义?

1 个答案:

答案 0 :(得分:5)

LIKE仅继承数据类型,长度,数据类型和CCSID。 要传递数组,请同时使用LIKE和DIM:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                              like(myarr) dim(%elem(myarr))
d  somevar                            like(somevar)

d myarr           s             64a   dim(100)
d somevar         s             65a

请参阅6.1 Infocenter LIKE() keyword