------------------------------------
Oracle Provider for OLE DB 9.2.0.1.0
------------------------------------
Copyright (C) Oracle Corporation 2002

This document provides information that supplements the Oracle Provider
for OLE DB documentation.


IMPORTANT INSTALLATION INFORMATION
==================================
The OraOLEDB provider, being a COM component, is NOT Multiple Oracle
Home (MOH) compliant. Only one version of OraOLEDB can exist on a 
machine at a time.

If you have Oracle Provider for OLE DB installed on your machine,
deinstall that provider before installing the new provider.


What's new in 9i Release 2 version
==================================
1. Support for using OraOLEDB with OLE DB .NET Data Provider. 
2. Performance enhancements for recordset creation and LOB manipulation.


What's new in 9i version
========================
1. Supports two most popular encoding forms of Unicode, UTF-8 and 
   UTF-16.
2. Supports architecturally-new Oracle Services for MTS in Oracle9i.


Oracle Technology Network
=========================
For sample code, the latest patches, and other technical information 
on the Oracle Provider for OLE DB, go to
http://otn.oracle.com/tech/windows/ole_db/


TIPS, LIMITATIONS AND KNOWN ISSUES
==================================

Performance
-----------
* To improve performance, do not use ADO method AppendChunk on
  LONG/LONG RAW columns. Instead, insert or update the entire
  LONG/LONG RAW column using the ADO AddNew or Update method.

* Use /*+ ... */ as the optimizer hint syntax with the OraOLEDB
  driver. The hint syntax, --+ ... is currently not supported.


Unsupported Parameter Types with OLE DB .NET Data Provider 
----------------------------------------------------------
* The Provider does not support LongVarChar, LongVarWChar, LongVarBinary, 
  and BSTR IN/OUT and OUT parameter types with OLE DB .NET Data Provider 
  because of a Microsoft's OLE DB .NET Data Provider known limitation.

Unsupported Datatypes
---------------------
* The Trusted Oracle datatype MLSLABEL is not supported by the
  OraOLEDB driver.

* The Provider does not currently support Object datatypes.


About LOB
---------
* The Command object currently errors out when updating LOBs on more
  than one row at a time.

  For example:
  UPDATE SomeTable SET LobCol = ? WHERE ...
  will error out if the UPDATE statement affects more than one row in
  the table. This restriction is limited to LOBs (BLOB/CLOB) and not
  LONGs (LONG/LONG RAW).

* As most LOB write (INSERT and UPDATE) operations involve multiple
  write operations within the provider, it is recommended that the
  transaction be enabled for such operations. Enabling transaction
  will allow consumers to rollback the entire write operation in the
  event of some failure. This is recommended when writing LOBs
  from the Command or the Recordset object.


DBLINK
------
  To enable creating rowsets using queries containing Oracle Database
Links, the connection string attribute, DistribTx, should be disabled.
Such rowsets are currently limited to being read-only.


Transaction
-----------
* During a Local or Global Transaction, do not execute SQLs
  COMMIT, ROLLBACK or SAVEPOINT using the Command interface as
  they may affect the data consistency in the Rowsets. The same
  holds for executing DDLs (CREATE TABLE, ALTER VIEW, etc.)
  in this explicit transaction mode, as DDLs in Oracle perform
  an implicit Commit to the database. Execute DDLs only in the
  Auto-Commit mode.

* To enable Autonomous Transaction support, the connection string
  attribute, DistribTx, should be disabled. Using this feature, consumers
  can execute Stored Procedures having COMMITs and/or ROLLBACKs.

  Note that Commit/Rollback in a stored procedure should be performed
  with caution. As OraOLEDB provides transactional capability on
  rowsets, whose data is cached locally on the client-side, performing
  an explicit commit/rollback in a stored procedure, with an open rowset,
  could cause the rowset to be out of sync with the database. In these
  cases, all commits and rollbacks (aborts) should be performed from the
  client-side (con.Commit or con.Abort). The exception is if the user
  is making use of Autonomous Transactions in the stored procedure.
  By using this, the transaction in the stored procedure is isolated
  from the main one; thus allowing for localized commits/aborts.
  Autonomous Transactions have been introduced only in Oracle8i (8.1.5)
  and are not available in the earlier releases of the RDBMS.

  For more information on Autonomous Transactions, refer to Oracle9i
  "Application Developer's Guide - Fundamentals" and "PL/SQL User's Guide
  and Reference".


Stored Procedures
-----------------
* LOB parameters to Stored Procedures are limited to only OUT against 
  Oracle8 (8.0.x) databases.

* For overloaded PL/SQL stored procedures and functions, the
  PROCEDURE_PARAMETERS Schema Rowset returns the parameter information
  for only the first overloaded stored procedure/function. This is
  because the OLE DB specification currently does not have any provision
  for overloaded procedures/functions.


Case Sensibility
----------------
  OraOLEDB currently expects the case of the objects specified in
the Schema Rowset Restriction to be exactly the same as in the database. 
That is, it does not support passing "emp" to access the table "EMP".

  For example:

  Dim restrictions As Variant
  ...
  ' Schemarowset contains table EMP owned by SCOTT
  restrictions = Array(Empty, "SCOTT", "EMP", Empty)
  Set objRst = objCon.OpenSchema(adSchemaTables, restrictions)
  ...
  ' Schemarowset created with no rows
  restrictions = Array(Empty, "scott", "emp", Empty)
  Set objRst = objCon.OpenSchema(adSchemaTables, restrictions)
  ...


Microsoft Visual Basic 6.0 Notes
--------------------------------
  The Microsoft ActiveX Data Objects and Microsoft ActiveX Data Objects
Recordset libraries must be included as Project References.


Microsoft Visual C++ 6.0 Notes
------------------------------
  OraOLEDB.h must be included in the relevant .cpp files in the VC++
project. Also, #define DBINITCONSTANTS needs to be added to one of
the .cpp files in the project.
