BUG: "Invalid number" Error When Inserting Decimals into UNIX Version of Oracle

ID: Q216978


The information in this article applies to:


SYMPTOMS

When using parameter binding in the Microsoft Oracle ODBC driver to insert decimal values into an Oracle server installed on UNIX, the following error is returned:

[Microsoft][ODBC driver for Oracle][Oracle]ORA-01722: invalid number
This error does not occur when inserting the same values into an Oracle server installed on Windows NT.


CAUSE

During connection, the Oracle driver determines the character to use as a decimal separator by issuing the following statement:

     SELECT 99/100 FROM DUAL 

which should return ".99", and the first character is used as the decimal separator.

On UNIX platforms, " .9" is returned instead of the expected ".99", which causes a decimal such as "123.45" to be passed as "123 45". This generates the "Invalid number" error.


RESOLUTION

A supported fix that corrects this problem is now available from Microsoft, but it has not been fully regression tested and should be applied only to systems experiencing this specific problem. If you are not severely affected by this specific problem, Microsoft recommends that you wait for the next that contains this fix.

To resolve this problem immediately, contact Microsoft Product Support Services to obtain the fix. For a complete list of Microsoft Product Support Services phone numbers and information on support costs, please go to the following address on the World Wide Web:

http://www.microsoft.com/support/supportnet/overview/overview.asp

Date Time Version Size File Name Platform
MDAC 2.0 02/02/99 -- 02.573.3802 136KB Msorcl32.dll --
MDAC 2.1 02/01/99 -- 02.573.3801 139KB Msorcl32.dll --


This hotfix is engineered to work with Microsoft Data Access Components (MDAC) builds 2.0 and 2.1. The hotfix contains the MDAC 2.0 MSORACL32.DLL and MDAC 2.1 MSORACL32.DLL. See installation instructions below.


Installation Instructions

  1. Place the self-extracting zip file (OraUnix.exe) into a temporary directory.


  2. Unzip the file with the "-d" option, to preserve directory information. For example: "OraUnix.exe -d". Two subfolders - Mdac20 and Mdac21 - will be created.


  3. Locate msorcl32.dll in the system folder.


  4. Verify that no applications or services are using the driver.


  5. Copy the new driver from the folder it was extracted to (choosing the appropriate version directory) into the system folder.


  6. Register the new driver using the following:
    
    Regsvr32.exe msorcl32.dll 



NOTE: Due to file dependencies, the most recent hotfix or feature that contains the above files may also contain additional files.



NOTE: If this product was already installed on your computer when you purchased it from the Original Equipment Manufacturer (OEM) and you need this fix, please call the Pay Per Incident number listed on the above Web site. If you contact Microsoft to obtain this fix, and if it is determined that you only require the fix you requested, no fee will be charged. However, if you request additional technical support, and if your no-charge technical support period has expired, or if you are not eligible for standard no-charge technical support, you may be charged a non-refundable fee.

For more information about eligibility for no-charge technical support, see the following article in the Microsoft Knowledge Base:
Q154871 Determining If You Are Eligible for No-Charge Technical Support


WORKAROUND

Do not use parameter binding in your application; instead, just insert the values hard-coded into an INSERT statement.


STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.

Additional query words: decimal oracle unix invalid number parameter ORA-01722


Keywords          : kbDatabase kbDriver kbODBC kbOracle kbUNIX kbODBC250bug kbODBC351qfe 
Version           : WINDOWS:2.0,2.1,2.5
Platform          : WINDOWS 
Issue type        : kbbug 

Last Reviewed: July 2, 1999