
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.
50 lines
1.6 KiB
Plaintext
50 lines
1.6 KiB
Plaintext
== Why is this an issue?
|
|
|
|
The ``++TO_NUMBER++`` function is converting the value of ``++BINARY_FLOAT++``, ``++BINARY_DOUBLE++``, ``++CHAR++``, ``++VARCHAR2++``, ``++NCHAR++``, or ``++NVARCHAR2++`` datatype to a value of ``++NUMBER++`` datatype.
|
|
|
|
|
|
Without providing the format of the input, ``++TO_NUMBER++`` will consider the provided value is compliant with the default format. Relying on a default configuration is a source of error because it creates a dependency between the code and the configuration of the ORACLE server where this code is deployed.
|
|
|
|
The behaviour of the ``++TO_NUMBER++`` function will certainly not be the expected one if the configuration of the ORACLE server is changing.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
The following code with return 0 on an ORACLE server running with its default US configuration with p_string = "2,540"
|
|
|
|
[source,sql]
|
|
----
|
|
IF ( TO_NUMBER(p_string) >= 0 and TO_NUMBER(p_string) <= TO_NUMBER('50.00') ) THEN
|
|
RETURN 1;
|
|
ELSE
|
|
RETURN 0;
|
|
END IF;
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
The following code with return 1 on an ORACLE server running with its default FR configuration with p_string = "2,540" because the comma will be interpreted as decimal separator instead of thousand separator.
|
|
|
|
[source,sql]
|
|
----
|
|
IF ( TO_NUMBER(p_string, '99.99') >= 0 and TO_NUMBER(p_string, '99.99') <= TO_NUMBER('50.00','99.99') ) THEN
|
|
RETURN 1;
|
|
ELSE
|
|
RETURN 0;
|
|
END IF;
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Provide the format of the input value.
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|