FOR and WHILE loops are structured control flow statements.

A FOR loop will iterate once for each element in the range, and the WHILE iterates for as long as a condition holds.

However, inserting an ``++EXIT++`` statement within the loop breaks this structure, reducing the code's readability and making it harder to debug.

== Noncompliant Code Example

----
SET SERVEROUTPUT ON

DECLARE
  TYPE myCollectionType IS VARRAY(10) OF VARCHAR2(42);
  myCollection myCollectionType := myCollectionType('Foo', 'Bar', NULL, 'Baz', 'Qux');

  i PLS_INTEGER;
BEGIN
  i := 1;
  WHILE i <= myCollection.LAST LOOP
    EXIT WHEN myCollection(i) IS NULL; -- Noncompliant, breaks the structure of the WHILE

    DBMS_OUTPUT.PUT_LINE('Got: ' || myCollection(i));
    i := i + 1;
  END LOOP;
----

== Compliant Solution

----
SET SERVEROUTPUT ON

DECLARE
  TYPE myCollectionType IS VARRAY(10) OF VARCHAR2(42);
  myCollection myCollectionType := myCollectionType('Foo', 'Bar', NULL, 'Baz', 'Qux');

  i PLS_INTEGER;
BEGIN
  i := 1;
  WHILE i <= myCollection.LAST AND myCollection(i) IS NOT NULL LOOP
    DBMS_OUTPUT.PUT_LINE('Got: ' || myCollection(i));
    i := i + 1;
  END LOOP;
END;
/
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
