TO_NUMBER documentation is kind confusing:
TO_NUMBER
converts expr to a value of NUMBER data type.
The expr can be a BINARY_DOUBLE value or a value of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 data type containing a number in the format specified by the optional format model fmt.
Despite this Oracle
only cares for decimal separator from the source string when doing the conversion so its ignores thousands group markers, and so forth. This behavior seems not to be documented anywhere.
The separators markers are set by NLS_NUMERIC_CHARACTERS.
The NLS_NUMERIC_CHARACTERS
option specifies the decimal marker and
thousands group marker for the session.
For a safest conversion consider CAST:
SQL> SELECT CAST('1000,98' as DECIMAL(10,2)) as TO_NUMBER FROM DUAL;
TO_NUMBER
----------
1000,98