Ü SETLL
(E) (Set
Lower Limit)
·
SETLL sets the file
pointer at the first occurrence of the record where the key field/RRN value is
greater than or equal to the factor-1 search argument value.
·
After positioning the
file pointer we can go for any file operation e.g. READ, READP,READPE, READE.
- If
the SETLL operation is not successful (no records found condition), the
file is positioned to the end of the file.
·
In factor-1 we can use
figurative constant *LOVAL, *HIVAL, *START, *END or we can use RRN VALUE or KEY
VALUE or KEY LIST.
·
We use %FOUND to
determine if the record found is having the key field/RRN value greater than or
equal to the key field. In this case HI indicator will be *on.
·
We use %EQUAL to
determine if the record found is having the key field/RRN value exactly same as
the search argument value in factor-1.
·
For sequential file we
can use RRN value only. In this case EQ indicator will be *on.
·
To handle SETLL
exceptions (file status codes greater than 1000), either the operation code
extender 'E' or an error indicator at LO level can be used.
·
The Equal Indicator
gets turned-on if and exact match is found. We can use this in place of
%equal().
·
If Greater value match
is found then HI level indicator will get turned on. We can use this in place
of %found().
·
*LOVAL doesn’t work for
non-keyed file.
·
SETLL if successful
sets EOF() *OFF if it is *ON, else if not successful doesn’t do anything to
EOF().
·
For a descending order
file, to read the first record we can do:
*HIVAL SETLL
File001
READ
·
For a descending order
file, to read the last record we can do:
*LOVAL SETLL
File001
READP
·
For an ascending order
file, to read the first record we can do:
*LOVAL SETLL
File001
READ
·
For an ascending order
file, to read the last record we can do:
*HIVAL SETLL
File001
READP
·
If a new record is
added or a key field altered after a SETLL operation with either *LOVAL or
*HIVAL, the file may no longer be positioned to the record with the lowest or
highest key.
·
The SETLL operation
does not apply the lock on the file hence if we just want to check the
existence of a record it is better to go for SETLL instead of using CHAIN which
locks the records and copies the data into input buffer leading to performance issue.
Factor 1
|
Op-code
|
Factor 2
|
Result Field
|
Resulting Indicators
HI LO EQ
|
Search argument
|
SETLL(E)
|
File or record format name
|
|
Greater value match found
|
Error
|
Exact match found
|
Example-I
: SETLL for sequential file
000001 setll filename (instead of: *LOVAL SETLL REC1)
Example-II : SETLL does not set EOF
to *ON if not successful.
Physical
file used in the program = PF0001
PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
AMINEM P00000000001 CONIZA TOJ 2 1 2,012 1
IROBO P00000000002 HENGURIZZA 1 6 2,012 1
ZENNIE P00000000003 UENAI 13 1 2,012 2
JOHNNE P00000000004 HOLLYNIA 14 2 2,011 1
JENNUMA P00000000008 UNIBAR 9 1 2,011 2
******** End of report ********
·
First
of all put ‘P00000000001’ in factor-1 for SETLL operation.
Columns . . . : 6 80 Browse AMITCC/QRPGLESRC
SEU==> OP_SETLL
FMT FX FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 FPF0001 IF E K DISK 130211
0003.00 C 'P00000000001'SETLL REC2 130212
0004.00 C IF %EQUAL(PF0001) 130211
0005.00 C 'EXACT MATCH' DSPLY 130211
0006.00 C ELSEIF %FOUND(PF0001) 130211
0007.00 C 'HIGHER MATCH'DSPLY 130211
0008.00 C ELSEIF %EOF(PF0001) 130212
0009.00 C 'END OF FILE' DSPLY 130212
0010.00 C ELSE 130211
0011.00 C 'NO RECORDS' DSPLY 130212
0012.00 C ENDIF 130211
0013.00 C SETON LR 130128
****************** End of data *******************************************************
OUTPUT
·
Now
we put ‘P00000000007’ in factor-1 for SETLL operation.
Columns . . . : 6 80 Browse AMITCC/QRPGLESRC
SEU==> OP_SETLL
FMT FX FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 FPF0001 IF E K DISK 130211
0003.00 C 'P00000000007'SETLL REC2 130212
0004.00 C IF %EQUAL(PF0001) 130211
0005.00 C 'EXACT MATCH' DSPLY 130211
0006.00 C ELSEIF %FOUND(PF0001) 130211
0007.00 C 'HIGHER MATCH'DSPLY 130211
0008.00 C ELSEIF %EOF(PF0001) 130212
0009.00 C 'END OF FILE' DSPLY 130212
0010.00 C ELSE 130211
0011.00 C 'NO RECORDS' DSPLY 130212
0012.00 C ENDIF 130211
0013.00 C SETON LR 130128
****************** End of data *******************************************************
OUTPUT
·
Now
we put ‘P00000000009’ in factor-1 for SETLL operation.
Columns . . . : 6 80 Browse AMITCC/QRPGLESRC
SEU==> OP_SETLL
FMT FX FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 FPF0001 IF E K DISK 130211
0003.00 C 'P00000000009'SETLL REC2 130212
0004.00 C IF %EQUAL(PF0001) 130211
0005.00 C 'EXACT MATCH' DSPLY 130211
0006.00 C ELSEIF %FOUND(PF0001) 130211
0007.00 C 'HIGHER MATCH'DSPLY 130211
0008.00 C ELSEIF %EOF(PF0001) 130212
0009.00 C 'END OF FILE' DSPLY >>>>>>> SETLL never sets EOF if it doesn’t 130212
0010.00 C ELSE find a record 130211
0011.00 C 'NO RECORDS' DSPLY 130212
0012.00 C ENDIF 130211
0013.00 C SETON LR 130128
****************** End of data *******************************************************
OUTPUT
Example-II : SETLL sets EOF to *OFF,
if successful
Columns . . . : 6 80 Browse AMITCC/QRPGLESRC
SEU==> OP_SETLL2
FMT FX FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 FPF0001 IF E K DISK 130211
0003.00 C *HIVAL SETLL PF0001 130212
0004.00 C READ PF0001 130212
0005.00 C IF %EOF(PF0001) 130212
0006.00 C 'END OF FILE' DSPLY 130212
0007.00 C ENDIF 130212
0008.00 C 'P00000000001'SETLL REC2 130212
0009.00 C IF %EQUAL(PF0001) 130212
0010.00 C 'EXACT MATCH' DSPLY 130211
0011.00 C ELSEIF %FOUND(PF0001) 130211
0012.00 C 'HIGHER MATCH'DSPLY 130211
0013.00 C ELSE 130211
0014.00 C 'NO RECORDS' DSPLY 130212
0015.00 C ENDIF 130211
0016.00 C IF NOT %EOF(PF0001) 130212
0017.00 C 'NOT EOF' DSPLY 130212
0018.00 C ENDIF 130212
0019.00 C SETON LR 130128
****************** End of data *******************************************************
OUTPUT
END OF FILE
EXACT MATCH
NOT EOF