== Why is this an issue?

Simple loops, of the form ``++LOOP ... END LOOP++``, behave by default as infinite ones, since they do not have a loop condition. They can often be replaced by other, safer, loop constructs.

=== Noncompliant code example

[source,sql]
----
SET SERVEROUTPUT ON

DECLARE
  i PLS_INTEGER;
BEGIN
  i := 1;
  LOOP -- Noncompliant, an infinite loop by default and therefore dangerous
    DBMS_OUTPUT.PUT_LINE('First loop i: ' || i);

    i := i + 1;
    EXIT WHEN i > 10;
  END LOOP;

END;
/
----

=== Compliant solution

[source,sql]
----
SET SERVEROUTPUT ON

DECLARE
  i PLS_INTEGER;
BEGIN
  FOR i IN 1..10 LOOP -- Compliant, much safer equivalent alternative
    DBMS_OUTPUT.PUT_LINE('Second loop i: ' || i);
  END LOOP;
END;
/
----
ifdef::env-github,rspecator-view[]

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

=== Message

Give this loop an end condition.


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