首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ibm上从SQL中获取记录集

在Ibm上从SQL中获取记录集
EN

Stack Overflow用户
提问于 2018-07-02 14:21:32
回答 2查看 111关注 0票数 0

因此,我正在尝试使IBM上的代码现代化,我正在考虑子文件和打印文件。

除去本机I/O操作之外,我可以想到三种方法来使用嵌入式SQL来填充数据。

  1. 游标取法
  2. 一页记录数的MultiOccurance数据结构
  3. 保存多页数据的大得多的MultiOccurance数据结构。

什么是最佳实践方法?有什么意见吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-03 11:27:41

我从来没有用数组备份过子文件,不过如果您有超过9999条记录,我想这将是一种有用的技术。相反,我一直只是从光标中读到它。实际上,将SQL和过程混合在一起使填充子文件变得非常容易。如果对您有意义,甚至可以使用多记录获取。下面是一个简单的示例(单记录提取):

代码语言:javascript
复制
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上。堆栈溢出更多地用于回答特定的客观问题。

票数 2
EN

Stack Overflow用户

发布于 2018-07-02 14:43:32

可能是“主要以意见为基础”的离题。

但是DS阵列..。越大越好..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51138336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档