------------------------------------ Oracle Provider for OLE DB 8.1.7.0.0 ------------------------------------ Copyright (C) Oracle Corporation 2000 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 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. 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. 1. NEW FEATURES AND IMPROVEMENTS (from 8.1.6.1.0) ================================================= 1.1 Unicode Support OraOLEDB began supporting the Unicode character set against Oracle8i and Oracle8 databases with the 8.1.6.1.0 release. However, in that release, the provider required the client character set to be set to UTF8 to enable its support. With 8.1.7.0.0 release, OraOLEDB no longer requires the client character set to be set to UTF8. The provider still supports this configuration but no longer requires it. Now, all the user needs to ensure is that the database character set is set to UTF8. The client character set, as always, should be set to the native character set of the client machine. For more information, refer to the documentation that is installed with Oracle Provider for OLE DB. 1.2 LOB parameters to Stored Procedures OraOLEDB now supports accesssing LOB parameters to Stored Procedures. This support is dependent on the use of the SPPrmsLOB custom property described below and as well as in the documentation. 1.3 NCHAR parameters to SQL statements OraOLEDB now supports binding N datatype (NCHAR, NVARCHAR and NCLOB) parameters to SQL statements. This support is dependent on the use of the NDatatype custom property described below as well as in the documentation. 1.4 Custom Properties for Commands OraOLEDB now provides a Custom Command Property Set having three Custom Properties. These properties have been added to allow consumers to selectively enable certain features so as to limit the overhead of extra processing to only when required. These properties are: (a) PLSQLRSet: This property is functionally the same as the connection string attribute with the same name. It should be set to TRUE when the Stored Procedure is returning a rowset (REF CURSOR). For performance, Consumers should begin using this property rather than the connection string attribute. (b) NDatatype: This property should be set to TRUE if any of the parameters bound to the SQL are of Oracle's N datatypes (NCHAR, NVARCHAR or NCLOB). (c) SPPrmsLOB: This property should be set to TRUE if any of the parameters bound to the Stored Procedure are of Oracle's LOB datatypes (CLOB, BLOB, or NCLOB). Note that the LOB parameters can be IN, OUT and IN/OUT against Oracle8i (8.1.x) databases but are limited to only OUT against Oracle8 (8.0.x) databases. When used, all the custom properties should be set to TRUE before the Command.Execute() and reset to FALSE after it. Please note that ADO requires custom properties to be set to TRUE before each Command.Execute(). For more information, refer to the documentation that is installed with Oracle Provider for OLE DB. 1.5 Multiple Rowsets OraOLEDB now supports returning Multiple Rowsets from a Stored Procedure. 1.6 Non-Packaged Stored Procedures/Functions returning Rowset The Provider now supports returning rowset from Non-Packaged Stored Procedures/Functions. (OraOLEDB 8.1.6.0.0 supported returning rowset from Packaged Procedures/Functions only). This feature is now supported against all Oracle databases (Oracle8i, Oracle8 and Oracle7). 1.7 ADOX Support The following ADOX objects, collections, properties, and methods are not supported by OraOLEDB: Catalog: Create, GetObjectOwner, and SetObjectOwner methods. Columns: Autoincrement, Default, Description column properties. Groups: Not supported. Indexes: Not supported. Keys: Not supported. Procedures: Command property; Append and Delete methods. Tables: All table properties. Users: Not supported. Views: Command property; Append and Delete methods. 2. TIPS, LIMITATIONS AND KNOWN ISSUES ===================================== 2.1 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. 2.2 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. 2.3 Use /*+ ... */ as the optimizer hint syntax with the OraOLEDB driver. The hint syntax, --+ ... is currently not supported. 2.4 The Trusted Oracle datatype MLSLABEL is not supported by the OraOLEDB driver. 2.5 The Provider does not currently support Oracle8i Object datatypes. 2.6 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. 2.7 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). 2.8 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. 2.9 OraOLEDB currently supports the Unicode feature against Oracle8i and Oracle8 databases but not against Oracle7. 2.10 To get full Unicode support, the database character set should be UTF8. If not, there is a possibility of a data loss. 2.11 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. 2.12 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 Oracle8i Application Developer's Guide - Fundamentals and PL/SQL User's Guide and Reference. 2.13 LOB parameters to Stored Procedures can be IN, OUT and IN/OUT against Oracle8i (8.1.x) databases but are limited to only OUT against Oracle8 (8.0.x) databases. 2.14 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". This issue will be resolved in the upcoming releases. 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) ...