
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
91 lines
1.8 KiB
Plaintext
91 lines
1.8 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Complex chains of IF, ELSIF and ELSE statements should be replaced by the more readable CASE one. A complex IF statement has either several ELSIF clauses, or both an ELSIF and an ELSE clause.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,sql]
|
|
----
|
|
DECLARE
|
|
x PLS_INTEGER := 0;
|
|
BEGIN
|
|
IF x = 0 THEN -- Noncompliant
|
|
DBMS_OUTPUT.PUT_LINE('x = 0');
|
|
ELSIF x = 1 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 1');
|
|
ELSIF x = 2 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 2');
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
x PLS_INTEGER := 0;
|
|
y PLS_INTEGER := 0;
|
|
BEGIN
|
|
IF x = 0 THEN -- Noncompliant
|
|
DBMS_OUTPUT.PUT_LINE('x = 0, y = ?');
|
|
ELSIF y = 1 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x != 0, y = 1');
|
|
ELSE
|
|
DBMS_OUTPUT.PUT_LINE('x != 0, y != 1');
|
|
END IF;
|
|
END;
|
|
/
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,sql]
|
|
----
|
|
DECLARE
|
|
x PLS_INTEGER := 0;
|
|
BEGIN
|
|
CASE x
|
|
WHEN 0 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 0');
|
|
WHEN 1 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 1');
|
|
WHEN 2 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 2');
|
|
ELSE
|
|
-- Do not forget the ELSE to prevent ORA-06592
|
|
NULL;
|
|
END CASE;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
x PLS_INTEGER := 0;
|
|
y PLS_INTEGER := 0;
|
|
BEGIN
|
|
CASE -- Compliant
|
|
WHEN x = 0 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x = 0, y = ?');
|
|
WHEN y = 1 THEN
|
|
DBMS_OUTPUT.PUT_LINE('x != 0, y = 1');
|
|
ELSE
|
|
DBMS_OUTPUT.PUT_LINE('x != 0, y != 1');
|
|
END CASE;
|
|
END;
|
|
/
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== duplicates: S2145
|
|
|
|
=== on 30 May 2013, 13:48:23 Fabrice Bellingard wrote:
|
|
This is originally a TOAD rule.
|
|
|
|
|
|
It could be improve to check only the first case which involves a single variable (because the gain in readability of the 2nd case is not really clear...).
|
|
|
|
endif::env-github,rspecator-view[]
|