include::../why-general.adoc[]

=== Noncompliant code example

The example below shows the typical situation in which shadowing can occur.

[source,sql,diff-id=1,diff-type=noncompliant]
----
SET SERVEROUTPUT ON

DECLARE
  foo VARCHAR2(42) := 'foo';
BEGIN
  DECLARE
    foo VARCHAR2(42) := 'bar'; -- Noncompliant - this variable hides the one above and should be renamed
  BEGIN
    DBMS_OUTPUT.PUT_LINE(foo); -- Displays "bar", which is confusing
  END;

  DBMS_OUTPUT.PUT_LINE(foo); -- Displays "foo"
END;
/
----

=== Compliant solution

[source,sql,diff-id=1,diff-type=compliant]
----
SET SERVEROUTPUT ON

DECLARE
  foo VARCHAR2(42) := 'foo';
BEGIN
  DECLARE
    bar VARCHAR2(42) := 'bar'; -- Compliant
  BEGIN
    DBMS_OUTPUT.PUT_LINE(bar); -- Displays "bar"
  END;

  DBMS_OUTPUT.PUT_LINE(foo); -- Displays "foo"
END;
/
----

include::../rspecator.adoc[]