【发布时间】:2015-04-15 06:09:02
【问题描述】:
问题前的一些上下文。
想象一下文件 FileA 有大约 50 个不同类型的字段。我没有使用该文件的所有程序,而是尝试使用服务程序,因此该文件只能由该服务程序访问。然后,调用该服务的程序将接收基于文件结构的 DataStructure 作为 ExtName。我使用 SQL 来恢复信息,所以,基本上,过程是这样的:
服务程序共享的数据结构:
D FileADS E DS ExtName(FileA) Qualified
程序调用的过程:
P getFileADS B Export
D PI N
D PI_IDKey 9B 0 Const
D PO_DS LikeDS(FileADS)
D LocalDS E DS ExtName(FileA) Qualified
D NullInd S 5i 0 Array(50) <-- Since 50 fields in fileA
//Code
Clear LocalDS;
Clear PO_DS;
exec sql
SELECT *
INTO :LocalDS :nullind
FROM FileA
WHERE FileA.ID = :PI_IDKey;
If SqlCod <> 0;
Return *Off;
EndIf;
PO_DS = LocalDS;
Return *On;
P getFileADS E
因此,如果该过程找到它,它将返回一个填充了来自 FileA 的记录的数据结构。
现在我的问题:有什么方法可以在不指定文件的每个 50 个字段的情况下分配 %nullind(field) = *On?
类似循环的东西
i = 1;
DoW (i <= 50);
if nullind(i) = -1;
%nullind(datastructure.field) = *On;
endif;
i++;
EndDo;
因为让我们面对现实吧,每次都查看每个文件的每个字段会很痛苦。
我知道一个简单的链(n)可以解决问题
chain(n) PI_IDKey FileA FileADS;
但我真的想用 SQL 来做。
感谢您的建议!
操作系统版本:7.1
【问题讨论】:
-
我没有给你的答案,但会提供一个建议。与其返回数据结构,不如编写 50 个 getFieldName 过程,分别返回每个字段。肯定有更多的前期设置,但随后您将进一步将文件 i/o 与调用程序分离。走数据结构方法,如果有任何字段改变或增加,所有调用程序都必须重新编译。我和一个老同事写了一个实用程序来为文件创建一个文件封装服务程序,尽管它目前不是共享它的最佳位置。
标签: db2 ibm-midrange rpgle