"CASE" expressions should end with "ELSE" clauses (plsql:S131)

Language:PL/SQL
Rule: “CASE” expressions should end with “ELSE” clauses (plsql:S131)
SonarQube: 9.4

Would you mind to replace “expressions” with “statements” in the title of that rule?

The examples are case statements and from what I see I only get issues for case statements, not expressions.

The reason might be that unlike with the CASE statement, no error is raised in the event that no WHEN clause is selected in a CASE expression. Instead, when no WHEN conditions are met, a CASE expression will return NULL.

Here’s an example with a case statement (first) and a case expression (second):

https://dev.finnova.ch/sonar/dashboard?id=sqldeveloper&branch=precommit%2Fuser_lars-20230206-DECLARE
  salary NUMBER := 20000;
  employee_id NUMBER := 36325;
  PROCEDURE give_bonus (emp_id IN NUMBER, bonus_amt IN NUMBER) IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE(emp_id);
    DBMS_OUTPUT.PUT_LINE(bonus_amt);
  END;
BEGIN
CASE
   WHEN salary >= 10000 AND salary <=20000 THEN
      give_bonus(employee_id, 1500);
   WHEN salary > 20000 AND salary <= 40000 THEN
      give_bonus(employee_id, 1000);
   WHEN salary > 40000 THEN
      give_bonus(employee_id, 500);
   END CASE;

   give_bonus(employee_id,
           CASE
              WHEN salary >= 10000 AND salary <= 20000 THEN 1500
              WHEN salary > 20000 AND salary <= 40000 THEN 1000
              WHEN salary > 40000 THEN 500
           END);
END;

Hello @LarsSt,

Thank you for opening this issue. Your feedback helps us improve our products.

Indeed this is the case. I updated the title to reflect the implementation.
The change will be included in the next release.

Best Regards
Mary

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.