SQL$HELP72.HLB  —  WHILE Control
    Allows the repetitive execution of one or more SQL statements in
    a compound statement based on the truth value of a predicate.

1  –  Environment

    You can use the WHILE control statement in a compound statement:

    o  In interactive SQL

    o  Embedded in host language programs to be precompiled

    o  As part of a procedure in an SQL module

    o  In dynamic SQL as a statement to be dynamically executed

2  –  Format

  (B)0while-statement=                                              
                                                                
  qwqqqqqqqqqqqqqqqqqqqqqqqwqq> WHILE qqq> predicate qqqqqk 
   mq> <beginning-label>: qj                              x 
  lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj     
  mqwq> DO qwq> compound-use-statement qwqq> END WHILE qwqk     
    x       mqqqqqqqqqqqqq<qqqqqqqqqqqqqj               x x     
    mq> LOOP qw> compound-use-statement qwq> END LOOP qqj x     
              mqqqqqqqqqqqqq<qqqqqqqqqqqqj                x     
  lqqqqqqqqqqqqqqqqqqqqqqqqq<qqqqqqqqqqqqqqqqqqqqqqqqqqqqqj     
  mqwqqqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq> 
    mq> <ending-label> qqj                                      

3  –  Arguments

3.1  –  beginning-label:

    Assigns a name to a control loop. A beginning label used with the
    LEAVE statement lets you perform a controlled exit from the WHILE
    loop. If you include an ending label, it must be identical to its
    corresponding beginning label. A beginning label must be unique
    within the procedure containing the label.

3.2  –  compound-use-statement

    Identifies the SQL statements allowed in a compound statement
    block. See the Compound Statement for the list of valid
    statements.

3.3  –  DO

    Marks the start of a control loop.

3.4  –  END LOOP ending-label

    Marks the end of a LOOP control loop. If you choose to
    include the optional ending label, it must match exactly its
    corresponding beginning label. An ending label must be unique
    within the procedure in which the label is contained.

    The optional ending-label argument makes multistatement
    procedures easier to read, especially in very complex
    multistatement procedure blocks.

3.5  –  END WHILE ending-label

    Marks the end of a DO control loop. If you choose to include the
    optional ending label, it must match exactly its corresponding
    beginning label. An ending label must be unique within the
    procedure in which the label is contained.

    The optional ending-label argument makes multistatement
    procedures easier to read, especially in very complex
    multistatement procedure blocks.

3.6  –  LOOP

    Marks the start of a control loop.

3.7  –  WHILE predicate

    Specifies a search condition that controls how many times SQL can
    execute a compound statement.

    SQL evaluates the WHILE search condition. If it evaluates to
    TRUE, SQL executes the associated sequence of SQL statements. If
    SQL does not encounter an error exception, control returns to the
    WHILE clause at the top of the loop for subsequent evaluation.
    Each time the search condition evaluates to TRUE, the WHILE-
    DO statement executes the SQL statements embedded within its
    DO . . . END WHILE block. If the search condition evaluates to
    FALSE or UNKNOWN, SQL bypasses the DO . . . END WHILE block and
    passes control to the next statement.

4  –  Examples

    Example 1: Using the While Statement to Count Substrings

    SQL> DECLARE :SUB_STR CHAR;
    SQL> DECLARE :SRC_STR CHAR(50);
    SQL> BEGIN
    cont>   SET :SUB_STR='l';
    cont>   SET :SRC_STR='The rain in Spain falls mainly on the plain';
    cont> END;
    SQL> SET FLAGS 'TRACE';
    SQL> BEGIN
    cont>-- This procedure counts the occurrence of substrings
    cont>   DECLARE :STR_COUNT INTEGER=0;
    cont>   DECLARE :CUR_POS INTEGER = POSITION (:SUB_STR IN :SRC_STR);
    cont>   WHILE :CUR_POS >0 DO
    cont>      SET :STR_COUNT=:STR_COUNT + 1;
    cont>         SET :CUR_POS = POSITION (:SUB_STR IN :SRC_STR FROM :CUR_POS + 1);
    cont>   END WHILE;
    cont>     TRACE 'FOUND ', :STR_COUNT, ' OCCURRENCES OF "', :SUB_STR, '"';
    cont> END;
    ~Xt: Found 4          occurrences of "l"
Close Help