我需要在 RRN(相对记录编号)处理的 PF 中的特定位置(例如:20 个中的 3 个)写入一条新记录。具体来说,它是一个多成员 PF。
我该怎么做?
这里有一个关于注释掉代码与使用源代码管理(SCM)系统的有趣讨论。
为什么要删除未使用的代码?
你不能。
您可以重写现有记录。 但是在写入新记录时,数据库会决定将其放置在哪里。
如果您有一个包含 5 条记录的文件,则 rrn# 1-5。 然后删除记录 2 和 3。 以后无法再次添加记录 #3。
如果文件被定义为 REUSEDLT(*NO),那么它位于末尾。 如果文件是重用lt(*YES),则数据库可能会重用已删除的记录,也可以将其添加到文件末尾。
源物理文件 (PF-SRC) 的默认描述 [即由创建源物理文件 (CRTSRCPF) 命令创建的系统提供的定义] 具有用于行编号的源序列 (SRCSEQ) 字段,该字段允许按十分之一和百分之一插入行,作为与任何整数行编号值的偏移量作为 SrcSeq。在现有行号的值之间插入具有行号值的新记录后,可以使用重新组织物理文件成员 (RGZPFM) 对这些行进行重新排序,并指定已将 SRCSEQ 定义为物理源成员上的键的键源逻辑文件 (LF-SRC);即,根据该 LF 对重组请求的密钥文件 (KEYFILE) 参数的规范,可以选择使用源更新选项 (SRCOPT) 的 *SRCSEQ 值来实现在该重组请求上默认或显式指定的所需源序列号 (SRCSEQ)。
可以通过[原子方式]来达到全部效果:将原始源数据复制到临时文件中,将偏移行号记录[即现有记录之间的新SeqNbr]插入到临时副本中,在临时副本中更新任何特定的旧SeqNbr值的SrcDta,清除原始源, 然后将有序的源数据从自更新以来的临时副本复制到原始源成员中。实际上,模仿每个@user2338816的"任何源代码编辑器的方式"可以更改数据,同时还允许插入行。
我看到你发布到另一个答案的评论:
我只是将 RRN 从最低记录移动 1,然后添加新记录。
不确定这是否相关,但您可以将记录(通过 RRN)复制到文件的末尾 - 您甚至可以更改它以将其插入到另一个文件中?(如源历史记录文件)
INSERT INTO YOURFILE
SELECT * FROM YOURFILE WHERE RRN(YOURFILE) = 40
然后更新该记录相同的记录
UPDATE UCWSDTLS SET SRCDTA = 'Whatever' WHERE RRN(UCWSDTLS) = 40
希望这有所帮助