Contents
- Audience
- Organization
- Related Documentation
- Conventions
- Documentation Accessibility
- Oracle 10g Release 1 (10.1) New Features in Data Cartridges
- Oracle9i New Features in Data Cartridges
- What Are Data Cartridges?
- Why Build Data Cartridges?
-
- Data Cartridge Domains
- Extending the Server: Services and Interfaces
- Extensibility Services
-
- Extensible Type System
-
- User-Defined Types
- Collection Types
- Reference Types (REF)
- Large Objects
- Extensible Server Execution Environment
- Extensible Indexing
- Extensible Optimizer
- Extensibility Interfaces
-
- DBMS Interfaces
- Cartridge Basic Service Interfaces
- Data Cartridge Interfaces
- Data Cartridge Development Process
- Cartridge Installation and Use
- Requirements and Guidelines for Data Cartridge Constituents
-
- Cartridge Schemas
- Cartridge Globals
- Cartridge Error Message Names or Error Codes
- Cartridge Installation Directory
- Cartridge Files
- Shared Library Names for External Procedures
- Data Cartridge Deployment Checklist
-
- Data Cartridge Naming Conventions
-
- Need for Naming Conventions
- Unique Name Format
- Cartridge Registration
- Cartridge Directory Structure and Standards
- Cartridge Upgrades
- Import and Export of Cartridge Objects
- Cartridge Versioning
-
- Internal Versioning
- External Versioning
- Cartridge Internationalization
- Cartridge Administration
-
- Administering Cartridge Access
- Invoker's Rights
- Configuration
- Suggested Development Approach
- Objects and Object Types
- Assigning an Object Identifier to an Object Type
- Constructor Methods
- Object Comparison
- Methods
-
- Implementing Methods
- Invoking Methods
- Referencing Attributes in a Method
- PL/SQL Packages
- Pragma RESTRICT_REFERENCES
- Privileges Required to Create Procedures and Functions
- Debugging PL/SQL Code
-
- Notes for C and C++ Programmers
- Common Potential Errors
-
- Signature Mismatches
- RPC Time Out
- Package Corruption
- External Procedures
- Using Shared Libraries
- Registering an External Procedure
- How PL/SQL Calls an External Procedure
- Configuration Files for External Procedures
-
- Passing Parameters to an External Procedure
- Specifying Datatypes
- Using the Parameters Clause
- Using the WITH CONTEXT Clause
- Doing Callbacks
-
- Restrictions on Callbacks
- Common Potential Errors
-
- Calls to External Functions
- RPC Time Out
- Debugging External Procedures
-
- Using Package DEBUG_EXTPROC
- Debugging C Code in DLLs on Windows NT Systems
- Guidelines for Using External Procedures with Data Cartridges
- Java Methods
- Overview of Cartridges and Multimedia Datatypes
- DDL for LOBs
- LOB Locators
- EMPTY_BLOB and EMPTY_CLOB Functions
- Using the OCI to Manipulate LOBs
- Using DBMS_LOB to Manipulate LOBs
- LOBs in External Procedures
- LOBs and Triggers
- Using Open/Close as Bracketing Operations for Efficient Performance
-
- Errors and Restrictions Regarding Open/Close Operations
- Overview of Extensible Indexing
-
- Purpose of Indexes
- Purpose of Extensible Indexing
- When to Use Extensible Indexing
- Index Structures
-
- B-tree
- Hash
- k-d tree
- Point Quadtree
- Extensible Indexing
- Example: A Text Indextype
-
- Defining the Indextype
-
- Non-Index-Based Functional Implementations
- Index-Based Functional Implementations
- Using the Indextype
- Overview of Indextypes and Domain Indexes
- ODCIIndex Interface
-
- Index Definition Methods
- Index Maintenance Methods
- Index Scan Methods
- Index Metadata Method
- Transaction Semantics during Index Method Execution
- Transaction Semantics for Index Definition Routines
- Consistency Semantics during Index Method Execution
- Privileges During Index Method Execution
- Creating, Dropping, and Commenting Indextypes
-
- Creating Indextypes
- Dropping Indextypes
- Commenting Indextypes
- Domain Indexes
-
- Domain Index Operations
- Domain Indexes on Index-Organized Tables
-
- Storing Rowids in a UROWID Column
- DML on Index Storage Tables
- Start, Fetch, and Close Operations on Index Storage Tables
- Indexes on Non-Unique Columns
- Domain Index Metadata
- Moving Domain Indexes Using Export/Import
- Moving Domain Indexes Using Transportable Tablespaces
- Object Dependencies, Drop Semantics, and Validation
-
- Object Dependencies
- Object Drop Semantics
- Object Validation
- Indextype, Domain Index, and Operator Privileges
- Partitioned Domain Indexes
-
- Dropping a Local Domain Index
- Altering a Local Domain Index
- Summary of Index States
- DML Operations with Local Domain Indexes
- Table Operations That Affect Indexes
- ODCIIndex Interfaces for Partitioning Domain Indexes
- Domain Indexes and SQL*Loader
- User-Defined Operators
-
- Operator Bindings
- Operator Privileges
- Creating Operators
- Dropping Operators
- Altering Operators
- Commenting Operators
- Invoking Operators
- Operators and Indextypes
-
- Operators in the WHERE Clause
- Operators Outside the WHERE Clause
- Operators that Return Ancillary Data
- Overview of Query Optimization
-
- Statistics
-
- User-Defined Statistics
- User-Defined Statistics for Partitioned Objects
- Selectivity
-
- User-Defined Selectivity
- Cost
-
- User-Defined Cost
- Defining Statistics, Selectivity, and Cost Functions
-
- User-Defined Statistics Functions
- User-Defined Selectivity Functions
- User-Defined Cost Functions for Functions
- User-Defined Cost Functions for Domain Indexes
- Using User-Defined Statistics, Selectivity, and Cost
-
- User-Defined Statistics
-
- Column Statistics
- Domain Index Statistics
- User-Defined Selectivity
-
- User-Defined Operators
- Standalone Functions
- Package Functions
- Type Methods
- Default Selectivity
- User-Defined Cost
-
- User-defined Operators
- Standalone Functions
- Package Functions
- Type Methods
- Default Cost
- Declaring a NULL Association for an Index or Column
- How Statistics Are Affected by DDL Operations
- Predicate Ordering
- Dependency Model
- Restrictions and Suggestions
-
- Parallel Query
- Distributed Execution
- Performance
- Introduction to Cartridge Services
- Cartridge Handle
-
- Client Side Usage
- Cartridge Side Usage
- Service Calls
- Error Handling
- Memory Services
- Maintaining Context
-
- Durations
- Globalization Support
-
- Globalization Support Language Information Retrieval
- String Manipulation
- Parameter Manager Interface
-
- Input Processing
- Parameter Manager Behavior Flag
- Key Registration
- Parameter Storage and Retrieval
- Parameter Manager Context
- File I/O
- String Formatting
- The ODCIAggregate Interface: Overview
- Creating a User-Defined Aggregate
- Using a User-Defined Aggregate
- Parallel Evaluation of User-Defined Aggregates
- Handling Large Aggregation Contexts
-
- External Context and Parallel Aggregation
- External Context and User-Defined Analytic Functions
-
- Summary of Steps to Support External Context
- User-Defined Aggregates and Materialized Views
- User-Defined Aggregates and Analytic Functions
-
- Reusing the Aggregation Context for Analytic Functions
- Example: Creating and Using a User-Defined Aggregate
- Overview of Table Functions
- Table Function Concepts
-
- Table Functions
- Pipelined Table Functions
- Pipelined Table Functions with REF CURSOR Arguments
-
- Errors and Restrictions
- Parallel Execution of Table Functions
- Pipelined Table Functions
-
- Implementation Choices for Pipelined Table Functions
- Declarations of Pipelined Table Functions
- Implementing the Native PL/SQL Approach
- Pipelining Between PL/SQL Table Functions
- Combining PIPE ROW with AUTONOMOUS_TRANSACTION
- Implementing the Interface Approach
-
- Scan Context
- Start Routine
- Fetch Routine
- Close Routine
- Example: Pipelined Table Functions: Interface Approach
- Describe Method
- Prepare Method
- Querying Table Functions
-
- Multiple Calls to Table Functions
- PL/SQL
- Performing DML Operations Inside Table Functions
- Performing DML Operations on Table Functions
- Handling Exceptions in Table Functions
- Parallel Table Functions
-
- Inputting Data with Cursor Variables
-
- Using Multiple REF CURSOR Input Variables
- Explicitly Opening a REF CURSOR for a Query
- PL/SQL REF CURSOR Arguments to Java and C/C++ Functions
- Input Data Partitioning
- Parallel Execution of Leaf-level Table Functions
- Input Data Streaming for Table Functions
-
- Parallel Execution: Partitioning and Clustering
- Parallelizing Creation of a Domain Index
- Transient and Generic Types
- Choosing a Language in Which to Write Methods
- Invoker's Rights
- Callouts and LOBs
- Saving and Passing State
- Designing Indexes
-
- Domain Index Performance
- Domain Index Component Names
- When to Use Index-Organized Tables
- Storing Index Structures in LOBs
- External Index Structures
- Multi-Row Fetch
- Designing Operators
- Designing for the Extensible Optimizer
-
- Weighing Cost and Selectivity
- Cost for functions
-
- Selectivity for Functions
- Statistics for Tables
- Statistics for Indexes
- Designing for Maintenance
- Making Your Cartridge Installable
- Designing for Portability
- Feature Requirements
- Modeling the Application
-
- Sample Queries
- Queries and Extensible Indexing
-
- Queries Not Benefiting from Extensible Indexing
- Queries Benefiting from Extensible Indexing
- Creating the Domain Index
-
- Creating the Schema to Own the Index
- Creating the Object Type (PowerDemand_Typ)
- Defining the Object Type Methods
- Creating the Functions and Operators
- Creating the Indextype Implementation Methods
-
- Type Definition
- ODCIGetInterfaces Method
- ODCIIndexCreate Method
- ODCIIndexDrop Method
- ODCIIndexStart Method (for Specific Queries)
- ODCIIndexStart Method (for Any Queries)
- ODCIIndexFetch Method
- ODCIIndexClose Method
- ODCIIndexInsert Method
- ODCIIndexDelete Method
- ODCIIndexUpdate Method
- ODCIIndexGetMetadata Method
- Creating the Indextype
- Defining a Type and Methods for Extensible Optimizing
-
- Creating the Statistics Table (PowerCartUserStats)
- Creating the Extensible Optimizer Methods
-
- Type Definition
- ODCIGetInterfaces Method
- ODCIStatsCollect Method (for PowerDemand_Typ columns)
- ODCIStatsDelete Method (for PowerDemand_Typ columns)
- ODCIStatsCollect Method (for power_idxtype Domain Indexes)
- ODCIStatsDelete Method (for power_idxtype Domain Indexes)
- ODCIStatsSelectivity Method (for Specific Queries)
- ODCIStatsSelectivity Method (for Any Queries)
- ODCIStatsIndexCost Method (for Specific Queries)
- ODCIStatsIndexCost Method (for Any Queries)
- ODCIStatsFunctionCost Method
- Associating the Extensible Optimizer Methods with Database Objects
- Analyzing the Database Objects
- Testing the Domain Index
-
- Creating and Populating the Power Demand Table
- Querying Without the Index
- Creating the Index
- Querying with the Index
- Introduction to the PSBTREE Example
- Design of the Indextype
- Implementing Operators
-
- Create Functional Implementations
-
- Functional Implementation of EQ (EQUALS)
- Functional Implementation of LT (LESS THAN)
- Functional Implementation of GT (GREATER THAN)
- Create Operators
-
- Operator EQ
- Operator LT
- Operator GT
- Implementing the Index Routines
- The C Code
-
- Common Error Processing Routine
- Implementation Of The ODCIIndexInsert Routine
- Implementation of the ODCIIndexDelete Routine
- Implementation of the ODCIIndexUpdate Routine
- Implementation of the ODCIIndexStart Routine
- Implementation of the ODCIIndexFetch Routine
- Implementation of the ODCIIndexClose Routine
- Implementing the Indextype
- Usage examples
-
- Explain Plan Output
- Pipelined Table Functions Example: C Implementation
-
- SQL Declarations for C Implementation
- C Implementation of the ODCITable Methods
- Pipelined Table Functions Example: Java Implementation
-
- SQL Declarations for Java Implementation
- Java Implementation of the ODCITable Methods
- OCI Access Functions for External Procedures
-
- OCIExtProcAllocCallMemory
- OCIExtProcRaiseExcp
- OCIExtProcRaiseExcpWithMsg
- OCIExtProcGetEnv
- Installing Java Cartridge Services Files
- Cartridge Services-Maintaining Context
-
- ContextManager
- CountException()
- CountException(String)
- InvalidKeyException()
- InvalidKeyException(String)
- System Defined Constants
- System-Defined Types
-
- ODCIArgDesc
- ODCIArgDescList
- ODCIRidList
- ODCIColInfo
- ODCIColInfoList
- ODCICost
- ODCIEnv
- ODCIFuncInfo
- ODCIIndexInfo
- ODCIPredInfo
- ODCIIndexCtx
- ODCIObject
- ODCIObjectList
- ODCIPartInfo
- ODCIQueryInfo
- ODCIStatsOptions
- ODCITabFuncStats
- ODCITabStats
- ODCIBFileList
- ODCITabFuncInfo
- ODCIDateList
- ODCINumberList
- ODCIRawList
- ODCIVarchar2List
- ODCIFuncCallInfo
- Mappings of Constants and Types
-
- Mappings in PL/SQL
- Mappings in C
- Mappings in Java
- Extensible Indexing - System-Defined Interface Routines
-
- ODCIGetInterfaces
- ODCIIndexAlter
- ODCIIndexClose
- ODCIIndexCreate
- ODCIIndexDelete
- ODCIIndexDrop
- ODCIIndexExchangePartition
- ODCIIndexFetch
- ODCIIndexGetMetadata
- ODCIIndexInsert
- ODCIIndexMergePartition
- ODCIIndexSplitPartition
- ODCIIndexStart
- ODCIIndexTruncate
- ODCIIndexUpdate
- ODCIIndexUtilCleanup
- ODCIIndexUtilGetTableNames
- The Extensible Optimizer Interface
-
- EXPLAIN PLAN
- INDEX Hint
- ORDERED_PREDICATES Hint
- Example
- User-Defined ODCIStats Functions
-
- ODCIGetInterfaces
- ODCIStatsCollect
- ODCIStatsCollect
- ODCIStatsDelete
- ODCIStatsDelete (Index)
- ODCIStatsFunctionCost
- ODCIStatsIndexCost
- ODCIStatsSelectivity
- ODCIStatsTableFunction
- Aggregate Routines
-
- ODCIAggregateInitialize
- ODCIAggregateIterate
- ODCIAggregateMerge
- ODCIAggregateTerminate
- ODCIAggregateDelete
- ODCIAggregateWrapContext
- Routines for Pipelined and Parallel Table Functions in C
-
- ODCITableStart
- ODCITableFetch
- ODCITableClose
- ODCITablePrepare
- ODCITableDescribe