== Why is this an issue?

Jumping back to a previous statement using ``++GOTO++`` is a way to reimplement loops, which PL/SQL already provides in much more readable forms.

=== Noncompliant code example

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

DECLARE
  result PLS_INTEGER := 0;
  counter PLS_INTEGER := 1;
BEGIN
  <<loop>>
  result := result + counter;
  counter := counter + 1;

  IF counter <= 9 THEN
    GOTO loop;                    -- Noncompliant
  END IF;

  DBMS_OUTPUT.PUT_LINE('Sum from 1 to 9 is ' || result); -- Displays 1 + 2 + ... + 8 + 9 = 45
END;
/
----

=== Compliant solution

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

DECLARE
  result PLS_INTEGER := 0;
BEGIN
  FOR counter IN 1 .. 9 LOOP
    result := result + counter;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Sum from 1 to 9 is ' || result); -- Displays 1 + 2 + ... + 8 + 9 = 45
END;
/
----

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

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

=== Message

Replace this backwards GOTO by a loop.


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

=== on 22 May 2013, 09:39:52 Fabrice Bellingard wrote:
Implementation: \http://jira.sonarsource.com/browse/PLSQL-222

include::../comments-and-links.adoc[]

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