Multiple qualification statements
When you use a qualification statement, you can do more than give IMS a field value with which to compare the fields of segments in the database. You can give several field values to establish limits for the fields you want IMS to compare.
You can use a maximum of 1024 qualification statements on a call.
- Logical AND
- For a segment to satisfy this request, the segment must satisfy both qualification statements that are connected with the logical AND (coded * or &).
- Logical OR
- For a segment to satisfy this request, the segment can satisfy either of the qualification statements that are connected with the logical OR (coded + or |).
One more Boolean operator exists and is called the independent AND. Use it only with secondary indexes.
For a segment to satisfy multiple qualification statements, the segment must satisfy a set of qualification statements. A set is a number of qualification statements that are joined by an AND. To satisfy a set, a segment must satisfy each of the qualification statements within that set. Each OR starts a new set of qualification statements. When processing multiple qualification statements, IMS reads them left to right and processes them in that order.
When you include multiple qualification statements for a root segment, the fields you name in the qualification statements affect the range of roots that IMS examines to satisfy the call. DL/I examines the qualification statements to determine the minimum acceptable key value.
If one or more of the sets do not include at least one statement that is qualified on the key field with an operator of equal-to, greater-than, or equal-to-or-greater-than, IMS starts at the first root of the database and searches for a root that meets the qualification.
If each set contains at least one statement that is qualified on the key field with an equal-to,
greater-than, or equal-to-or-greater-than operator, IMS uses
the lowest of these keys as the starting place for its search. After establishing the starting
position for the search, IMS processes the call by searching
forward sequentially in the database, similar to the way it processes GN calls. IMS examines each root it encounters to determine whether the root
satisfies a set of qualification statements. IMS also examines
the qualification statements to determine the maximum acceptable key value.
If one or more of the sets do not include at least one statement that is qualified on the key field with an operator of equal-to, less-than-or-equal-to, or less-than, IMS determines that no maximum key value exists. If each set contains at least one statement that is qualified on the key field with an equal-to, less-than, or equal-to-or-less-than operator, IMS uses the maximum of these keys to determine when the search stops.
IMS continues the search until it satisfies the call, encounters the end of the database, or finds a key value that exceeds the maximum. If no maximum key value is found, the search continues until IMS satisfies the call or encounters the end of the database.
ROOTKEYb
=b10&FIELDBb
b=XYZ+ROOTKEYb
=10&FIELDBb
b
=ABCROOTKEYb
=>10&ROOTKEYb
<20ROOTKEYb
10&ROOTKEYb
=<20+ROOTKEYb
=>110&ROOTKEYb
=<120In this case, the minimum key is 10 and the maximum key is 120. Keys in the range of 10 to 20 and 110 to 120 satisfy the call. IMS stops the search when it encounters the first key greater than 120. IMS does not scan from 20 to 110 but skips forward (using the index for HIDAM or PHIDAM) from 20 to 110. Because of this, you can use ranges for more efficient program operation.
When you use multiple qualification statement segments that are part of logical relationships, additional considerations exist.