# Best Practices

Rules which enforce generally accepted best practices.
Table of Contents

## TomKytesDespair

Since: PMD 5.1

Priority: Medium (3)

"WHEN OTHERS THEN NULL" hides all errors - (Re)RAISE an exception or call RAISE_APPLICATION_ERROR

This rule is defined by the following XPath expression:

    //ExceptionHandler[QualifiedName/@Image='OTHERS']
                      [count(Statement)=1]
                      [Statement/UnlabelledStatement/Expression/PrimaryPrefix/Literal/NullLiteral]

Example(s):

    CREATE OR REPLACE PACKAGE BODY update_planned_hrs
    IS

    PROCEDURE set_new_planned (p_emp_id IN NUMBER, p_project_id IN NUMBER, p_hours IN NUMBER)
    IS
    BEGIN
       UPDATE employee_on_activity ea
       SET ea.ea_planned_hours = p_hours
       WHERE
                ea.ea_emp_id = p_emp_id
                AND ea.ea_proj_id = p_project_id;

    EXCEPTION
              WHEN NO_DATA_FOUND THEN
              RAISE_APPLICATION_ERROR (-20100, 'No such employee or project');

    END set_new_planned;

    FUNCTION existing_planned (p_emp_id IN NUMBER, p_project_id IN NUMBER) RETURN NUMBER

    IS

    existing_hours NUMBER(4);

    BEGIN
       SELECT ea.ea_planned_hours INTO existing_hours
       FROM employee_on_activity ea
       WHERE
                ea.ea_emp_id = p_emp_id
                AND ea.ea_proj_id = p_project_id;

       RETURN (existing_hours);

       EXCEPTION
              WHEN OTHERS THEN NULL;

       END existing_planned;

    END update_planned_hrs;
    /

Use this rule by referencing it:

    <rule ref="category/plsql/bestpractices.xml/TomKytesDespair" />