使用部分密钥的RPG SETLL用法

时间:2016-03-09 03:25:31

标签: rpgle

我有一个阅读标题和详细信息表的任务。

标题获取订单号

详细。 键是ordernumber,orderline。

c     Keyordnum     Setll     detail
c                   Iffound
c     Keyordnum     reade     detail
c* read for each orderline update the warehouse field
c     xxxxxxx       update    detailformat

我遇到的问题是编写重复记录时出错。

问题1.上面的xxxxxx是否可以创建ordernumber和orderline的复合键并以这种方式更新?问题是如何更新每一行。

如果不是这样,你如何解决读取部分密钥和更新每一行的问题?

2 个答案:

答案 0 :(得分:0)

UPDATE没有因素1.使用UPDATE时,您不会使用密钥。更新的记录是您阅读的最后一条记录。

您的代码似乎并不完整。我期待这样的事情:(以自由格式书写,因为我没有在10年内编写固定格式)

setll  keyordno detail;
if %found(detail);
  reade keyordno detail;
  dow not %eof(detail);
     //set warehouse field
     update detailformat;
     reade keyordno detaill;
  enddo;
endif;

除非存在涉及仓库字段的唯一密钥,否则您不应该看到重复的记录。

答案 1 :(得分:0)

xxxxxx以上作为更新的因素不能有复合键,如果有重复,则在更新之前已经读取过。


因此,如果您不确定是否从标题本身读取重复的订单号,请将带有工作变量(wk_ordernum)的附加检查更改为再次读取。像这样的东西..

if wk_ordernum <> ordernumber; //check duplicate ordernumber
wk_ordernum = ordernumber;
setll  keyordno detail;
if %equal(detail); 
  reade keyordno detail;
  dow not %eof(detail);
     //set warehouse field
     update detailformat;
     reade keyordno detaill;
  enddo;
endif;
endif; // end check duplicate ordernumber