
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.
71 lines
1.5 KiB
Plaintext
71 lines
1.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Centralizing the definitions of custom exceptions comes with two major benefits:
|
|
|
|
* The duplication of the exceptions declarations and ``++PRAGMA EXCEPTION_INIT++`` is avoided
|
|
* The risk of associating multiple different exceptions to the same number is reduced
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,sql]
|
|
----
|
|
SET SERVEROUTPUT ON
|
|
|
|
DECLARE
|
|
user_not_found EXCEPTION;
|
|
PRAGMA EXCEPTION_INIT(user_not_found, -20000); -- Noncompliant, user_not_found is bound to -20000
|
|
BEGIN
|
|
NULL;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
user_not_found EXCEPTION;
|
|
PRAGMA EXCEPTION_INIT(user_not_found, -20000); -- Noncompliant, user_not_found is again bound to -20000, duplication
|
|
BEGIN
|
|
NULL;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
wrong_password EXCEPTION;
|
|
PRAGMA EXCEPTION_INIT(wrong_password, -20000); -- Noncompliant, wrong_password is bound to -20000, conflicting with user_not_found
|
|
BEGIN
|
|
NULL;
|
|
END;
|
|
/
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,sql]
|
|
----
|
|
SET SERVEROUTPUT ON
|
|
|
|
CREATE PACKAGE exceptions AS
|
|
user_not_found EXCEPTION;
|
|
wrong_password EXCEPTION;
|
|
|
|
PRAGMA EXCEPTION_INIT(user_not_found, -20000); -- Non-Compliant (flag as false-positive)
|
|
PRAGMA EXCEPTION_INIT(wrong_password, -20001); -- Non-Compliant (flag as false-positive), conflicts are easier to avoid
|
|
END;
|
|
/
|
|
|
|
DROP PACKAGE exceptions;
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Move this exception declaration to a specialized package.
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|