Ibm midrange 可以通过RPGILE中的物理文件读取指针的位置吗?

Ibm midrange 可以通过RPGILE中的物理文件读取指针的位置吗?,ibm-midrange,rpgle,Ibm Midrange,Rpgle,是否可以通过RPGLE中的物理文件获取指针的位置 这样我就可以存储该位置,稍后再返回到该位置?您正在查找相对记录编号(RRN?) 文件信息数据结构(INFDS)的第397位 来自 使用InfDs(InfDSk)选项打开文件,并使用以下选项定义InfDSk: dcl-ds InfDSk qualified ; RRN uns(10) pos(397) ; end-ds ; 记录编号RRN(或recno)可通过以下方式获得:InfDSk.RRN 与使用RRN不同的是,在键控访问的文件中,我更

是否可以通过RPGLE中的物理文件获取指针的位置


这样我就可以存储该位置,稍后再返回到该位置?

您正在查找相对记录编号(RRN?)

文件信息数据结构(INFDS)的第397位

来自


使用
InfDs(InfDSk)
选项打开文件,并使用以下选项定义InfDSk:

dcl-ds InfDSk qualified ;
   RRN uns(10) pos(397) ;
end-ds ;
记录编号RRN(或recno)可通过以下方式获得:
InfDSk.RRN


与使用RRN不同的是,在键控访问的文件中,我更喜欢链而不是特定的数据结构,然后写入DS…

使用SQL获取完整的10位RRN

exec sql declare x1 cursor for select rrn(a) rn, a.* from myfile/mlib a;

exec sql open x1;

exec sql fetch next from x1 into :myds;
危险数据结构方法仅返回四个字节397-400个物理文件,记录数超过64k,无法正常工作。


在我们使用整数数据类型之前的早期版本中。

您确实意识到可以使用带或不带数据结构的RRN。RRN用于选择特定记录,就像密钥访问文件中的密钥一样。它与检索到的数据的存储位置(数据结构与否)无关。上面的示例是获得完整的10个位置还是仅获得前4个字节(64K)的记录?INFD的397-400位置中的4字节或10位无符号值的值最高可达4294967295。您的权利@jmarkmurphy,我的评论有误导性。我想说的是,关于最初的问题“我可以存储该位置,稍后再返回?”,我认为如果文件已存储,并且由密钥处理,则使用RRN不是正确的方法。如果我想回到某个位置,我会保留钥匙(在DS或其他任何地方),然后重新进行链/更新。我觉得保留RRN不安全,如果在您处理文件时另一个进程更改了该文件怎么办?当然,这取决于用法和上下文,如果文件没有键,您就别无选择,但一般来说,我倾向于避免使用RRN:-)一旦写入记录,RRN是一个固定值。在删除之前,它将始终具有相同的RRN。即使有人在相关RRN之前删除或重新使用记录。唯一的例外是,如果文件被重新排序,但这需要独占锁,因此只要在检索它们的同一作业中使用它们,它就不会干扰缓存的RRN。DS中返回的4字节整数是10位…可以有高达4294967295的值。即使您假设旧的二进制数据类型,它们也支持9位,所以你可以索引99999999条记录,而不是64K。我只知道在一个地方,每次订单在一天内超过65k时,我都会遇到问题。可能那里的ds定义不正确。这是RPG II代码。
exec sql declare x1 cursor for select rrn(a) rn, a.* from myfile/mlib a;

exec sql open x1;

exec sql fetch next from x1 into :myds;