
SEARCH ALL
SEARCH ALL
Search all is similar to binary search. Binary search is a way
of searching for element [array] within group of elements. Binary
search works by comparing an input value to the middle element of
the array.
Elements within array must be sorted in either ascending or
descending order before binary search and Binary search trying
to match search element with the middle element.
If the search element is equals to middle element, search process
end there.
If the search element is greater than middle element then array is
divided into 2 equal parts and search will happen in second half.
If element is less than middle element then it again search within
first half.
Whether it selected first half or second half, it again select the
middle element in that part and continue this process until either
element is found or there are no elements to search.
Binary Search Algorithm / halfinterval search
If table is contain N even number of elements then middle number
is identified as N/2.
If that N number is odd then middle number is identified as (N+1)/2.
If we are trying to find an element “14” within set of numbers then
the following process happens to find element.
18, 14, 1, 6, 9, 8, 3
Step 1: All elements must be in sorted order.
1, 3, 6, 8, 9, 14, 18
TIP : SEARCH ALL dont do this. we need to use ascending keyword
while defining array using OCCURS clause.
Step 2: Find middle element. In this group we have 7 elements.
accoridng to binary search rules we need to calcualte middle
element by using formula N1/2. So, in our array, middle
element is 8.
Step 3: Binary search match 14 with middle element 8 and finds 14 > 8
so divides this group into 2 equal groups
Group 1: 1, 3, 6 Groups 2: 9, 14, 18
Binary search compares second half middle element 14 with 14.
Search found the element.
Search all stops the search here.
When the Table entries are arranged in sequence by some field, such as
EMPID, the most efficient type of lookup is a binary search. The
SEARCH ALL statement provides a means for doing the same.
TIP : If array is large (100+) it is good practice to go for search all.
If array is small then go for search.
Syntax:
SEARCH ALL Table–name
[AT END imperative statements
WHEN data name 1 IS EQUAL TO
[identifier 2 or literal 1 or arithmetic expression 1]
[AND data name 2 IS EQUAL TO
[identifier 2 or literal 1 or arithmetic expression 1]
IMPERATIVE STATEMENT
[END SEARCH]
1. The condition following the word WHEN can only test for equality.
2. The condition has to be equality.
3. Only one WHEN clause can be used.
4. Table must be sorted order.
5. The OCCURS item and its index, which define the Table argument, must
appear to the left of the equal to sign.
6. Does not require SET statement prior to SEARCH ALL.
SERACH ALL Example :
01 WTFIELDS.
05 WTCODECTRL OCCURS 100 TIMES
INDEXED BY WTCODECTRLINDEX
ASCENDING KEY IS WTCODEVALUE
10 WTCODEVALUE PIC X(03).
10 WTCODEDESC PIC X(03).
SEARCH ALL WTCODECTRL
AT END DISPLAY “SEARCH ELEMENET NOT FOUND IN TABLE WTCODECTRL”
WHEN WTBILLERCODE (WTCODECTRLINDEX) = “121”
DISPLAY WTCODEDESC (WTCODECTRLINDEX)
ENDSEARCH.

