== 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[]