== Why is this an issue?

Naming custom exceptions the same as predefined ones, while technically acceptable, is not a good practice.


=== Noncompliant code example

[source,sql]
----
SET SERVEROUTPUT ON

DECLARE
  no_data_found EXCEPTION; -- Noncompliant, overrides an Oracle predefined exception

  d VARCHAR2(1);
BEGIN
  SELECT dummy INTO d FROM DUAL WHERE dummy = 'Y'; -- Will raise STANDARD.NO_DATA_FOUND
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No data found!'); -- Won't be executed, as NO_DATA_FOUND was overriden, confusing!
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Unknown error!'); -- *Will* be executed
END;
/
----


=== Compliant solution

[source,sql]
----
SET SERVEROUTPUT ON

DECLARE
  my_own_exception EXCEPTION; -- Compliant

  d VARCHAR2(1);
BEGIN
  SELECT dummy INTO d FROM DUAL WHERE dummy = 'Y'; 
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No data found!'); -- *Will* be executed
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Unknown error!');
END;
/
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Rename this exception to not override a predefined exception type.


endif::env-github,rspecator-view[]
