2023-10-16 12:04:08 +02:00
|
|
|
include::../why-general.adoc[]
|
2023-05-03 11:06:20 +02:00
|
|
|
|
2023-10-16 12:04:08 +02:00
|
|
|
=== Noncompliant code example
|
|
|
|
|
|
|
|
The example below shows the typical situation in which shadowing can occur.
|
2020-06-30 12:47:33 +02:00
|
|
|
|
2023-06-15 17:09:18 +02:00
|
|
|
[source,sql,diff-id=1,diff-type=noncompliant]
|
2020-06-30 12:47:33 +02:00
|
|
|
----
|
|
|
|
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;
|
|
|
|
/
|
|
|
|
----
|
|
|
|
|
2023-10-16 12:04:08 +02:00
|
|
|
=== Compliant solution
|
|
|
|
|
2023-06-15 17:09:18 +02:00
|
|
|
[source,sql,diff-id=1,diff-type=compliant]
|
2020-06-30 12:47:33 +02:00
|
|
|
----
|
|
|
|
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;
|
|
|
|
/
|
|
|
|
----
|
|
|
|
|
2023-06-15 17:09:18 +02:00
|
|
|
include::../rspecator.adoc[]
|