因此,我正在尝试使IBM上的代码现代化,我正在考虑子文件和打印文件。
除去本机I/O操作之外,我可以想到三种方法来使用嵌入式SQL来填充数据。
什么是最佳实践方法?有什么意见吗?
发布于 2018-07-03 11:27:41
我从来没有用数组备份过子文件,不过如果您有超过9999条记录,我想这将是一种有用的技术。相反,我一直只是从光标中读到它。实际上,将SQL和过程混合在一起使填充子文件变得非常容易。如果对您有意义,甚至可以使用多记录获取。下面是一个简单的示例(单记录提取):
dcl-proc LoadSubfile;
dcl-pi *n;
keyFields Type;
end-pi;
dcl-ds sflin LikeRec(sfl: *Input) Inz;
ClearSubfile();
OpenCursor(keyFields);
dow FetchCursor(record);
eval-corr sflin = record;
PopulateHidden(sflin);
rrn += 1;
write sfl sflin;
enddo;
CloseCursor();
rrnMax = rrn;
end-proc;这里有一些东西没有定义,例如,如果返回记录,FetchCursor()返回一个指示符= *On。PopulateHidden()填充子文件记录中的隐藏字段。我使用隐藏在可编辑子文件中保存可以更改的字段的原始值。我定义了与记录字段相同的子文件字段,这样我就可以执行一个eval-corr来将它们放入IO数据结构中。如果我认为数据库中可能有超过9999条记录,我还将检查子文件rrn是否溢出。然后,我抛出一条带有说明的subfile full消息来过滤记录集。
有些事情你没有问,但我会告诉你,因为你问了最佳实践。除非有理由避免,否则我使用SFLCLR清除子文件,并且通常一次性加载整个子文件,除非我怀疑会有数千条记录。许多老的优化,比如SFLNXTCHG和一次加载一个页面,都是由于通信速度慢而到位的。与其说是双轴通信,不如说是ASCII工作站控制器或远程工作站,它们通常位于通信线路的另一边,比双绞线慢得多。这不再是真的了。我倾向于避免那些旨在保留带宽的旧黑客,因为它们只会使代码复杂化。立即写入整个文件,在处理时,使用for循环读取整个子文件。
而且,在将来,如果您想了解最佳实践的工作代码,或者如果您对理论答案更感兴趣,这些问题应该在Code Review上。堆栈溢出更多地用于回答特定的客观问题。
发布于 2018-07-02 14:43:32
可能是“主要以意见为基础”的离题。
但是DS阵列..。越大越好..。
https://stackoverflow.com/questions/51138336
复制相似问题