|Oracle9i Data Cartridge Developer's Guide
Release 2 (9.2)
Part Number A96595-01
This chapter describes features relating to data cartridges that are new in Oracle9i Release 2 (9.2).
Oracle9i adds partitioned, local domain indexes and a number of other new features of interest to developers of data cartridges. To support local domain indexes in particular, both the Extensible Indexing interface (the
ODCIIndex* routines) and the Extensible Optimizer interface (the
ODCIStats* routines) have undergone some changes: new routines have been added, and most of the existing routines have acquired an additional parameter of the new system-defined type
Existing code that uses the Oracle8i version of the
ODCIStats* interfaces does not need to be changed to run under Oracle9i unless you want to use new features that require the new interfaces. Some new features--for example, user-defined aggregate functions and table functions--do not require the new interfaces, but local domain indexes do.
To implement local domain indexes, you must adopt the new
ODCIIndex* interface. This means that, if you have existing code based on the Oracle8i version of the interface, you must migrate that code in its entirety to the Oracle9i version of the interfaces: you cannot simply supplement it with calls to a few new functions and leave the rest of the code unchanged. And, if you do adopt the Oracle9i
ODCIIndex* interface, you can use only the Oracle9i
ODCIStats* interface with it: you cannot use the Oracle8i version.
Oracle supports both the Oracle8i and Oracle9i versions of the
ODCIStats* interfaces. The string you return in the
ODCIObjectList parameter of
ODCIGetInterfaces tells the system which version your code implements. (Details on using this routine are explained in the reference chapters on the Extensible Indexing and Extensible Optimizer interfaces later in this book.)
To sum up: If you have Oracle8i code, that code will still work. To continue to use the Oracle8i interface, do not implement Oracle9i versions of any of the
It is now possible to create and rebuild domain indexes and local domain index partitions in parallel.
A table function can now return the generic collection type SYS.AnyDataSet.
Discrete domain indexes, called local domain indexes, can be built on the partitions of a range-partitioned table. Local domain indexes are equipartitioned with the underlying table: all keys refer only to rows stored in the local domain index's corresponding table partition.
The partitioning scheme provided with Oracle9i makes it possible to create local domain indexes. This scheme may be changed in future releases of Oracle to be more transparent. Domain-index creators who adopt the present scheme should be aware that later on they may need to change to a new syntax and semantics for partitioning of indexes.
The extensible optimizer supports collection of user-defined statistics--partition level and aggregate--for partitioned tables.
DBMS_ODCI contains a utility to help better estimate the cost of user-defined functions.
Instances of an indextype or object inherit an association of a statistics type. Now you can replace this with a
NULL association for occasions when the benefit of using a better plan may not outweigh the added cost of compiling the cost or selectivity functions implemented by the statistics type.
Custom aggregate functions can be defined for working with complex data.
Table functions can be used in the
FROM clause of a query to return a collection (either a nested table or a varray) of rows as output. A table function can use parallel execution, and result rows from can be pipelined--that is, iteratively returned.
External procedures can be given fields or parameters of a generic type that can contain values of any scalar or user-defined type, making it unnecessary to implement multiple versions of the same external procedure just to handle multiple datatypes.