Oracle ODBC Driver




The Oracle ODBC Driver enables Microsoft[R]  Windows XP [R}, Windows 2000 [R], Windows NT[R] and Windows 98 [R] applications that implement the Microsoft Open Database Connectivity  (ODBC) API to read from and write to Oracle databases.


The Oracle ODBC Driver distribution kit consists of Dynamic Link Libraries, a Windows help file, a copy of the license and this product description.  To use an ODBC enabled application the following software is required in addition to the Oracle ODBC Driver:


·         Oracle Net version

·         Network transport on the client.

·         Oracle Server




The Oracle ODBC Driver complies with Version 3.52 of the Microsoft ODBC specification.




If you would like to receive Oracle Support for your Oracle ODBC Driver, please call (650) 506-5578 in the US , or contact your local Oracle Sales office. Please note that Oracle will not provide support for the Oracle ODBC Driver unless a support contract is in place.




The Oracle ODBC Driver requires a system configuration supported by Windows XP, Windows 2000, Windows NT or Windows 98 including:


  A minimum of 32 MB system memory

  A minimum of 3 MB free disk space




Microsoft Windows XP, Windows 2000, Windows NT 4.0 or Windows 98 operating system.

Oracle Net Client or above

Oracle Universal Installer shipped with Oracle or above




This section lists the server software required to support ODBC enabled applications through the Oracle ODBC Driver.


  Oracle Server 8.1.7 or higher




1. Post-Installation                   


Use the Microsoft(R) ODBC Administrator to configure your Oracle ODBC Driver data sources. Refer to the Oracle ODBC driver help file section entitled Configuring the Data Source.


2. New Features           


Refer to the Oracle ODBC Driver help file section entitled New Features.


3. Data Conversions


The Oracle ODBC Driver follows the Microsoft(R) ODBC 3.00 Software Development Kit (SDK) guidelines for manipulating and displaying real and double data types. Precision (the maximum number of digits used) of SQL_DOUBLE and SQL_FLOAT is 15.


If double values are stored in a Oracle database precision for these data types can be much greater than what ODBC currently supports. The end result will be the loss of precision. For Example:


                A float data type defined in Oracle with the default precision contains a number such as:




                When converted on the Windows Platform the number will drop precision to




This loss of precision may have different behavior for different applications. For Microsoft Access(R), the user is not allowed to update the data. Microsoft Access(R) thinks the data has changed, because Oracle has the value 123.9991029382123 and Microsoft Access(R) now has the original but truncated number 123.99910293821. Microsoft Access(R) cannot update the row using the 123.99910293821 truncated number as a selection criteria since that row does not exist in the Oracle database.  Only the original row with 123.9991029382123 exists in the Oracle database.


In Microsoft Query(R) the display will be incorrect. Lets take for example the following double precision number to display:




                with Microsoft Query(R) the number is displayed as




Microsoft Query(R) makes a call to SQLColAttributes returning the display size of 22. The format defined in the ODBC SDK for display of a double precision data is the following:


                Total 22 Length

                (a sign,15 digits,a decimal point,the letter E,a sign and 3 digits)


Our example contains a total string length of 23 with 16 digits instead of the 15 digits for precision. This is why the data is displayed wrong.


In general to avoid precision problems using ODBC, ensure that data stored in the Oracle database for a double data type conform to the specifications described in the Microsoft ODBC Programmer's Reference and SDK Guide.


4. Known Software Problems for Oracle ODBC Driver


·        The SQLSetStmtOption SQL_QUERY_TIMEOUT does not work if the database server is running on Windows NT.

·         SQLCancel does not work if you are canceling a statement that is executing on Windows NT database server.


5.  Software Problems Fixed








·         Added support for TNS_ADMIN variable to determine the location of the tnsnames.ora file to parse in the ODBC Administrator Utility.  The order of precedence for locating the tnsnames.ora file is to first look in the location defined by the environment variable TNS_ADMIN, if not found the driver looks for the registry string value named TNS_ADMIN under the current Oracle home, and lastly the driver uses the tnsnames.ora file located in the Oracle home. (Bug3055714)


·         Corrected computation of length of LOBs read.  This appeared as a CPU loop when reading some CLOB values with embedded NUL characters.  (Bug3531495)


·         Fixed numeric conversion to character string which was adding a leading zero to fraction values and was switching to scientific notation under the wrong conditions. (Bug3263737)


·         Fixed inability to pass LOB values larger than 32K bytes as input parameters to stored procedures. (Bug3211672)


·         Fixed incorrect binding of Unicode values as parameters. (Bug3249731)


·         Fixed possible corruption of BLOB when using SQLGetData.  (Bug3041953)


·         Fixed parsing problem of not finding bind parameters when the SQL statement contained a comment followed by another comment or quoted string without any space inbetween.  (Bug3038835)


·         Fixed problem of “UPDATE … WHERE CURRENT OF” would fail sometimes for a keyset cursor.   (Bug3038823)


·         Fixed problem of inserting NULL lobs.  (Bug3028525)


·         Fixed problem of CLOB data not being returned properly when accessing a database encoded with a multi-byte character set.  (Bug3015481)


·         Resolved problem of SQLProcedureColumns failing with an ORA-24345.  (Bug2993934)


·         Fixed fetching of data when SQL_COLUMN_IGNORE is set.  The driver was not fetching data for columns with SQL_COLUMN_IGNORE set, now it only ignores data for fetching being done through SQLBulkOperations.  (Bug2976963)


·         Fixed memory leak that occurred when reading through forward only cursors.  (Bug2972233)


·         Fixed data corruption which could occur when using SQL_C_NUMERIC data type. (Bug2945992)


·         Fixed access violation which could sometime occur on SQLConnect. (Bug2933827)


·         Fixed memory leak that occurred on a SQLFreeStmt of type SQL_DROP and the result set contained LOB data. (Bug2912973)


·         Fixed problem of first column of ADO recordset being omitted when handling refcursor results. (Bug2897335)


·         Fixed generation of fractional second output on timestamp character strings.  The maximum precision for a TIMESTAMP column is 9; however, the default precision is 6.  The ODBC driver was always generating strings that contained 9 characters of fractional seconds.  This was causing Microsoft Excel to fail when handling TIMESTAMP columns because the size of the timestamp string the ODBC driver generated was larger than expected.  (Bug2893288)


·         Fixed null termination of CHAR output parameters when calling a procedure. (Bug2885702)


·         Fix problem of doing updates via DAO when a CLOB is part of the table.  An ORA-24801 use to occur.  (Bug2776568)


·         Fixed delayed writing of LOB values which caused INSERT TRIGGER routines to pick up NULL for the :NEW value.  (Bug 3215443)


·         Fix setting of OCI_ATTR_MAXDATA_SIZE to avoid getting ORA-01460 (unreasonable or unimplemented conversion).  The driver will only set the max data attribute on INSERT, UPDATE and SELECT statements.  (Bug2226375)












·         Added data source configuration option to disable SQLDescribeParam support. (Bug 2485192)

·         Deprecated the RemoveControlChars feature from the oraodbc.ini file.  The ODBC driver will always strip invalid control characters from SQL statements before passing the statement to the Oracle database.

·         Changed the online help to be HTML based. 

·         Changed the default behavior of the driver to always remove invalid control characters from SQL statements.  Deprecated the RemoveControlChars option which was located in the oraodbc.ini file.  This option is no longer necessary.  (Bug2543632)



·         Implemented an internal pre-fetch cache to improve the performance of fetching data, especially for applications which are fetching one row at a time.  The size of the cache is a data source configuration option.

·         Deprecated the 'Pre-Fetch Count' data source configuration option and replaced it with the option 'Fetch Buffer Size'.  The 'Fetch Buffer Size' option is used to specify the size of the internal pre-fetch cache.  The default is 64,000 bytes.

·         Extended Unicode support to utilize the Unicode enhancements added in Oracle 9.0.1.  Unicode SQL strings can now be sent to the database server and columns within a table can be defined as containing Unicode data.  The driver now supports the SQL types SQL_WCHAR, SQL_WVARCHAR and SQL_WLONGVARCHAR.

·         Added the data source configuration option 'Numeric Settings'.  This option is used to choose which numeric settings will be used in receiving and returning numeric data that is bound as strings.  This option allows the user to choose Oracle NLS settings (the default setting), Microsoft regional settings (to provide a way to mirror the Oracle OLE DB driver's behavior for greater interoperability) and US numeric settings, which are necessary when using MS Access or DAO in non-US environments.  (Bug 2148838 and others) 

·         Added support for the SQL TIMESTAMP data type.  This support is only available in Oracle 9.0.1 or higher clients and requires an Oracle 9.0.1 or higher database.



·         Added support for connection syntax "<username>/<password> as sysdba" and "<username>/<password> as sysoper".  The "as sysdba" and "as sysoper" string can also be contained in the password field.  (Bug 2114033) 

·         Added support for the statement attribute SQL_ATTR_RETRIEVE_DATA.  (Bug 2165706)



·         Added support for <username>/<password> syntax to be used as username to log on. (as requested by Bug 1094170) 



·         When connected to an Oracle 8.1.6 or higher database the ODBC driver will now return SQL_SVE_CASE in response to a SQLGetInfo call for SQL_SQL92_VALUE_EXPRESSIONS.  (as requested by bug 1807444).

·         Added support for fetch and position by BOOKMARK and the SQLBulkOperations routine. A side effect of this is that the ADO Recordcount property will now return the number of records in the resultset instead of -1. (Bug 898817)

·         When the data source configuration option "Force SQL_WCHAR Support" is enabled the functions SQLColumns and SQLProcedureColumns will now report character columns as being SQL_WCHAR,  SQL_WVARCHAR or SQL_WLONGVARCHAR.  (Bug 1735893)



·         An option has been added to the configuration screen to allow users to change the default value of the SQL_ATTR_METADATA_ID connections and statement attribute.   It usually defaults to SQL_FALSE.  Checking this data source option will cause the default to be SQL_TRUE at connection time.  The implications of these values are listed in the ODBC specifications and so will not be repeated here.   Calls made by the application to specifically change the value of the attribute after connection time will be unaffected by this option and will complete their functions as expected.  This option will be in the Workarounds section of the configuration screen with the caption 'Set Metadata Id Default to SQL_TRUE'.  (as requested by bug1671529)

·         An option has been added to the configuration screen to allow users to turn on support for SQLGetData extensions SQL_GD_ANY_COLUMN, SQL_GD_ANY_ORDER and SQL_GD_BOUND.  (SQL_GD_BLOCK is always supported.)  Turning on this option will of necessity implicitly turn on the Force Retrieval of Longs option, even if the Force Retrieval of Longs option is not selected in the configuration screen.  This means that all behavior associated with the Force Retrieval of Longs option will also apply to the SQLGetData extensions option.



·         The ODBC installation now supports multiple Oracle homes.  Each installation of the ODBC driver will be uniquely identified by the name of the Oracle home which it is installed under.  For example, if the name of the Oracle home is "OraHome81" the ODBC driver will installed as "Oracle in OraHome81".  The Oracle ODBC driver use to always be installed as "Oracle ODBC Driver".  This list of installed ODBC drivers can be viewed from the ODBC Administrator utility under the "Drivers" tab. 


When an existing Oracle 8.1.7 home is upgraded to the ODBC driver the installation will convert existing data source definitions for the "Oracle ODBC Driver" to the name of the newly installed driver.


·         Added support for SQL_ATTR_METADATA_ID attribute (Bug 1373064).  This attribute is an ODBC 3.0 feature which is used to specify case sensitivity on arguments of the ODBC catalog functions.  For example, if SQL_ATTR_METADATA_ID is set to SQL_TRUE then the case of the TableName argument of the function SQLTables is not significant.  The default value, as defined by the Microsoft ODBC specification, is SQL_FALSE (case sensitive). 


Prior to supporting SQL_ATTR_METADATA_ID all arguments to catalog functions were treated as case insensitive unless they were contained in double quotes.  Existing applications may need to be revised if they are passing case sensitive arguments for objects which are stored in the database as case insensitive.  For example, the call "{call proc1(?)}" use to succeed if 'proc1' was stored in the database as 'PROC1'.  Now that same call will succeed if the procedure name is stored in the database as 'proc1' or if the SQL_ATTR_METADATA_ID is set to SQL_TRUE.


·         Changed the SQLGetInfo return value of SQL_DBMS_NAME to be "Oracle".  The value returned use to be "Oracle8".  (Bug 1494101)

·         Added a "Test Connection" button to the ODBC data source configuration screen.  This feature obsoletes the ODBC Test Utility which has been shipping with the ODBC driver.  The ODBC Test Utility has been removed from the ODBC installation.



·         Reorganized the ODBC data source configuration interface.  Integrated TNS name selection with the tnsname.ora located on the system.

·         Added support for Microsoft EXEC syntax.  A procedure (or function) call specified in an EXEC statement will be translated to its equivalent Oracle procedure (or function) call before being processed by the Oracle8 database server if this feature is enabled.

·         Added a data source configuration option to enable/disable support of Microsoft EXEC syntax.

·         Added a data source configuration option for Batch Autocommit Mode.  The default behavior for the Oracle8 ODBC driver is to rollback a transaction if there was an error on one or more rows.  The default behavior for the Oracle7 ODBC driver is to commit the transaction up to the row an error was encountered.  This option was added to be able to configure an data source to be compatible with the Oracle7 ODBC driver.  An additional option was added, which is only available in Oracle8i clients, which will commit all rows that did not have an error.

·         Added a data source configuration option to force SQLDescribeCol to return a data type of SQL_WCHAR for SQL_CHAR columns, SQL_WVARCHAR for SQL_VARCHAR columns, and SQL_WLONGVARCHAR for SQL_LONGVARCHAR columns.  Enabling this option allows ADO applications to use Unicode.   ADO relies on the return value of SQLDescribeCol to determine how to bind the result column.  Currently the Oracle ODBC driver would never return a data type of 'SQL_W' because the database does not support defining columns as type Unicode.  By default Force WCHAR Support is disabled.

·         Improved the performance of the catalog functions SQLColumns, SQLPrimaryKeys and SQLTablePrivileges.



·         The Microsoft ODBC compliance level of the Oracle8 ODBC driver is now 3.51.

·         The Oracle8 ODBC driver now supports Unicode.  Unicode support is dependent on the Unicode features available through the Oracle Call Interface (OCI).  OCI 8.1.5 supports inputting Unicode data into a database through SQLBindParameter and retrieving Unicode data from a database through SQLBindCol or SQLGetData.

·         Added a data source configuration option to disable Microsoft Transaction Server (MTS) support.  By default MTS support is enabled.

·         When a user attempts to connect to the database with an expired password, the driver will prompt the user to change the password and then will connect the user to the database when the password has been changed.  If the user tries to connect using SQLDriverConnect with a SQL_DRIVER_NOPROMPT parameter, the driver will not prompt for the password change but will simply fail out of the connect attempt with an error indicating that the password has expired.

·         The Microsoft Redistributable components for ODBC have been removed from the installation.  These components are installed as part of the operating system.  The latest versions of these components are often installed by Microsoft products or are available from their Universal Data Access web site (

·         The file sqora.wri has been renamed to ODBCRelnotes.wri.



·         Microsoft Transaction Server (MTS) support is dependent on the ORAMTS Patch  ODBC support for the ORAMTS patch had previously been made available with the ODBC patch kit.

·         Added support for SQL_GD_BLOCK (SQL_GETDATA_EXTENSIONS).

·         A registry entry (Password) may now be set in the registry for a DSN and will be read by the driver to obtain a password for a connection instead of prompting the user for the password.  This was implemented to be compatible with the Oracle7 ODBC driver.  Note that we do not provide any tools to store passwords in the registry.

·         The option of forcing OCI cursors to close upon a call to SQLFreeStmt with a SQL_CLOSE or SQL_DROP parameter, a call to SQLCloseCursor, or a call to SQLFreeHandle on a statement handle is now available to the user.  The default of this option will not force the OCI cursors to close under the above circumstances.  This option was added because in some cases it is desirable to forcibly close OCI cursors under these circumstances, but to do so when it is not specifically desired can cause an unnecessary performance hit.  



·         Enhanced our implementation of returning result sets from procedure calls.  The refcursor parameters can be omitted from the procedure call.  This was done to be consistent and compatible with other ODBC implementations.



·         Microsoft Transaction Server (MTS) Support.  Requires a minimum of an Oracle 8.1.5 client.



·         Support for scrollable and updateable cursors.



·         SQL_C_NUMERIC data type



·         Option to enable/disable support of SQL_ATTR_QUERY_TIMEOUT



·         LOB Support (requires minimum of Oracle 8.0.5 client)

·         Connection Pooling


ODBC 8.0.5

·         Returning result sets from procedure calls.

·         ODBC driver supports connection failover capabilities provided by Failsafe and Parallel Server.



·         SQLDescribeParam Support

·         SQLBrowseConnect Support



·         ODBC 3.0 Compliant




The following table summarizes the testing configurations that an ODBC release was certified with.  This table is intended to give an indication of what environments the ODBC driver is know to work in.  The table is not meant to be a complete list of all supported environments.


ODBC          Database        Operating                                           3rd Party

Version       Versions       Systems                   MDAC               Products        Windows XP SP2   2.70.9001.0          MSOffice XP

                                                                                     MSOffice 2000

                                                                                     Visual Basic 6.0




For More Information


Contact your Oracle Sales Representative, your Oracle Sales Office, or call 1-800-ORACLE1.  Outside of the United States please call 650-506-5701.


Copyright Oracle Corporation 2005. All Rights Reserved.  Printed in the U.S.A.   This document is provided for informational purposes only.  No contract is implied or allowed.  Oracle is a registered trademark.  Oracle9 and Oracle Net9 are trademarks of Oracle.  Microsoft, Microsoft Access, Microsoft Query, MS, Windows XP, Windows NT, Windows 2000 and Windows 98 are trademarks of Microsoft Corporation.  PowerBuilder is a registered trademark of Sybase Inc. All other company and product names mentioned are used for identification purposes only, and may be trademarks of their respective owners.  Oracle Corporation World Headquarters is located at 500 Oracle Parkway, Redwood Shores, CA  94065 U.S.A.