有一个包含 validfromDate 和 validtoDateRange 字段的文件。两者都是 LF 中的关键字段。
有没有办法使用 SETLL 或任何其他操作码(无需通读文件)检查是否存在日期介于 fromdate 和 todate 值之间的记录?
等效的 SQL 是:
select 1 from sysibm.sysdummy1 a where exists (
SELECT * FROM ipldtad.iplmai WHERE current_date
between VALFRDATE and VALTODATE )
你不需要阅读整个文件,但我认为你需要在SETLL之后阅读一条记录。
setll (from) myfile;
if %found();
read myfile;
if keyfld <= to;
have_record = *on;
endif;
endif;
如果我错了请纠正我,但我认为解决问题的方法是:
假设我们有一个包含字段的物理文件
(DTEFROM, DTETO)
和一组记录
#1 (01FEB23, 05MAR23)
#2 (01MAR23, 30MAR23)
#3 (05MAR23, 10MAR23)
#4 (05MAR23, 12MAR23)
#5 (15MAR23, 20MAR23)
它有一个逻辑文件(索引)
myFile(DTEFROM)
通过 DTEFROM 字段 假设我们需要找到一条记录
DTECHK = 13MAR23
位于 DTEFROM 和 DTETO 之间。
我会这样做:
setGT (DTECHK) myFile;
readp myFile; // read record #4
dow not %eof(myFile);
if DTECHK <= DTEFROM; // true for record #2
hasRec = *on;
leave;
endif;
readp myFile; // read records #3, #2, and so on...
enddo;
setGT 将在 DTEFROM >= DTECHK 的第一个条目之前设置指针(或者,如果您愿意,在满足我们正在寻找的范围左端的最后一个条目之后)。 然后我们就可以“向后”读取记录 (readp),检查范围右边界的条件 (DTECHK <= DTEFROM) until we find the desired record (this will be record # 2) or reach the beginning of the file (readp will return % eof=true).