Table of Contents
- Title and Copyright Information
- Preface
- Changes in This Release for Oracle AI Database Development Guide
- New Features in 26ai
- Assertions
- Blockchain Table Log History
- Calendar Functions and Aggregation Filters
- Data Use Case Domains
- Flashback Time Travel Enhancements
- IF [NOT] EXISTS Syntax Support
- Implicit Connection Pooling for Database Resident Connection Pooling
- Lock-Free Reservation
- Multilingual Engine JavaScript Modules and Environments
- Multiple Named Pools for DRCP
- Precheckable Constraints using JSON Schema
- Reset Database Session State
- Saga APIs Using Oracle Saga Framework
- Schema Annotations
- Sessionless Transactions
- Shut Down Connection Draining for DRCP
- Table DDL Change Notification
- Promotion of a Sessionless Transaction to an XA Transaction
- Deprecated Features
- New Features in 26ai
- Part I Database Development Fundamentals
- Design Basics
- Connection Strategies for Database Applications
- Performance and Scalability
- Performance Strategies
- Tools for Performance
- Monitoring Database Performance
- Testing for Performance
- Using Client Result Cache
- About Client Result Cache
- Benefits of Client Result Cache
- Guidelines for Using Client Result Cache
- Setting Result Cache Integrity
- Client Result Cache Consistency
- Deployment-Time Settings for Client Result Cache
- Client Result Cache Statistics
- Validation of Client Result Cache
- Client Result Cache and Server Result Cache
- Client Result Cache Demo Files
- Other Supported Features
- Client Result Cache Compatibility with Previous Releases
- Statement Caching
- OCI Client Statement Cache Auto-Tuning
- Client-Side Deployment Parameters
- Using Query Change Notification
- Using Database Resident Connection Pool
- About Database Resident Connection Pool
- Configuring DRCP
- Using Multi-pool DRCP
- Sharing Proxy Sessions
- Using JDBC with DRCP
- Using OCI Session Pool APIs with DRCP
- Session Purity
- Connection Class
- Session Purity and Connection Class Defaults
- Setting the Purity and Connection Class in the Connection String
- Using SERVICE_TAG Parameter in CONNECT_DATA
- Starting DRCP
- Set a Waiting Connection to Time Out
- Shut Down Connection Draining for DRCP
- Enabling DRCP
- Connecting to a Pool in Multi-pool DRCP
- Implicit Connection Pooling
- Implicit Stateful and Stateless Sessions
- Statement and Transaction Boundary
- Configuring Implicit Connection Pool Boundaries
- Impact of Round-trip OCI Calls on Implicit Connection Pooling States
- Deciding which Pool Boundary to Use
- Implicit Connection Pooling with CMAN-TDM and PRCP
- Setting or Resetting the Session State at the Boundaries During Deployment
- Using the Session Cached Cursors with Implicit Connection Pooling
- Security
- Benefiting from the Scalability of DRCP in an OCI Application
- Benefiting from the Scalability of DRCP in a Java Application
- Best Practices for Using DRCP
- Compatibility and Migration
- Using DRCP with Oracle Database Native Network Encryption
- DRCP Restrictions
- Using DRCP with Custom Pools
- Explicitly Marking Sessions Stateful or Stateless
- Using DRCP with Oracle Real Application Clusters
- DRCP with Data Guard
- Memoptimize Pool
- Oracle RAC Sharding
- Designing Applications for Oracle Real-World Performance
- Security
- High Availability
- Advanced PL/SQL Features
- Part II SQL for Application Developers
- SQL Processing for Application Developers
- Description of SQL Statement Processing
- Grouping Operations into Transactions
- Ensuring Repeatable Reads with Read-Only Transactions
- Locking Tables Explicitly
- Using Oracle Lock Management Services (User Locks)
- Using Serializable Transactions for Concurrency Control
- Nonblocking and Blocking DDL Statements
- Autonomous Transactions
- Resuming Execution After Storage Allocation Errors
- Using IF EXISTS and IF NOT EXISTS
- Using SQL Data Types in Database Applications
- Using the Correct and Most Specific Data Type
- Representing Character Data
- Representing Numeric Data
- Floating-Point Number Components
- Floating-Point Number Formats
- Representing Special Values with Native Floating-Point Data Types
- Comparing Native Floating-Point Values
- Arithmetic Operations with Native Floating-Point Data Types
- Conversion Functions for Native Floating-Point Data Types
- Client Interfaces for Native Floating-Point Data Types
- Representing Date and Time Data
- Representing Specialized Data
- Identifying Rows by Address
- Displaying Metadata for SQL Operators and Functions
- Registering Application Data Usage with the Database
- Data Use Case Domains
- Overview of Use Case Domains
- Use Case Domain Types and When to Use Them
- Privileges Required for Use Case Domains
- Using a Single-column Use Case Domain
- Using a Multi-column Use Case Domain
- Creating a Multi-column Use Case Domain
- Associating a Multi-column Use Case Domain at Table Creation
- Associating a Multi-column Use Case Domain with Existing Columns
- Altering a Multi-column Use Case Domain
- Disassociating a Multi-column Use Case Domain from a Column
- Dropping a Multi-column Use Case Domain
- Using a Flexible Use Case Domain
- Using an Enumeration Use Case Domain
- Specifying a Data Type for a Domain
- Changing the Use Case Domain Properties
- SQL Functions for Use Case Domains
- Viewing Domain Information
- Built-in Use Case Domains
- Schema Annotations
- Data Use Case Domains
- Using Regular Expressions in Database Applications
- Using Indexes in Database Applications
- Guidelines for Managing Indexes
- Managing Indexes
- When to Use Domain Indexes
- When to Use Function-Based Indexes
- Advantages of Function-Based Indexes
- Disadvantages of Function-Based Indexes
- Example: Function-Based Index for Precomputing Arithmetic Expression
- Example: Function-Based Indexes on Object Column
- Example: Function-Based Index for Faster Case-Insensitive Searches
- Example: Function-Based Index for Language-Dependent Sorting
- Maintaining Data Integrity in Database Applications
- Introduction to Constraints and Assertions
- Enforcing Business Rules with Constraints and Assertions
- Enforcing Business Rules with Both Constraints and Application Code
- Creating Indexes for Use with Constraints
- When to Use NOT NULL Constraints
- When to Use Default Column Values
- Choosing a Primary Key for a Table (PRIMARY KEY Constraint)
- When to Use UNIQUE Constraints
- Enforcing Referential Integrity with FOREIGN KEY Constraints
- Minimizing Space and Time Overhead for Indexes Associated with Constraints
- Guidelines for Indexing Foreign Keys
- Referential Integrity in a Distributed Database
- When to Use CHECK Constraints
- Using PRECHECK to Pre-validate a CHECK Constraint
- Examples of Defining Constraints and Assertions
- Managing Constraints and Assertions
- Why Disable Constraints or Assertions?
- Creating Enabled/Validated Constraints and Assertions (Default)
- Creating Disabled Constraints and Assertions
- Enabling Existing Constraints and Assertions
- Disabling Existing Constraints and Assertions
- Guidelines for Enabling and Disabling Key Constraints
- Fixing Constraint Exceptions
- Modifying Constraints
- Renaming Constraints
- Dropping Constraints and Assertions
- Managing FOREIGN KEY Constraints
- Viewing Information About Constraints
- Viewing Information about Assertions
- Advanced SQL Extensions: Calendar Functions and Aggregation Filters
- Building Queries with Correct JOINS More Easily
- SQL Processing for Application Developers
- Part III PL/SQL for Application Developers
- Coding PL/SQL Subprograms and Packages
- Overview of PL/SQL Subprograms
- Overview of PL/SQL Packages
- Overview of PL/SQL Units
- Creating PL/SQL Subprograms and Packages
- Altering PL/SQL Subprograms and Packages
- Deprecating Packages, Subprograms, and Types
- Dropping PL/SQL Subprograms and Packages
- Compiling PL/SQL Units for Native Execution
- Invoking Stored PL/SQL Subprograms
- Invoking Stored PL/SQL Functions from SQL Statements
- Analyzing and Debugging Stored Subprograms
- Package Invalidations and Session State
- Example: Raising an ORA-04068 Error
- Example: Trapping ORA-04068
- Using PL/Scope
- Overview of PL/Scope
- Privileges Required for Using PL/Scope
- Specifying Identifier and Statement Collection
- How Much Space is PL/Scope Data Using?
- Viewing PL/Scope Data
- Overview of Data Dictionary Views Useful to Manage PL/SQL Code
- Sample PL/Scope Session
- Using the PL/SQL Hierarchical Profiler
- Using PL/SQL Basic Block Coverage to Maintain Quality
- Developing PL/SQL Web Applications
- Overview of PL/SQL Web Applications
- Implementing PL/SQL Web Applications
- Using mod_plsql Gateway to Map Client Requests to a PL/SQL Web Application
- Using Embedded PL/SQL Gateway
- How Embedded PL/SQL Gateway Processes Client Requests
- Installing Embedded PL/SQL Gateway
- Configuring Embedded PL/SQL Gateway
- Configuring Embedded PL/SQL Gateway: Overview
- Configuring User Authentication for Embedded PL/SQL Gateway
- Configuring Static Authentication with DBMS_EPG
- Configuring Dynamic Authentication with DBMS_EPG
- Configuring Anonymous Authentication with DBMS_EPG
- Determining the Authentication Mode of a DAD
- Examples: Creating and Configuring DADs
- Example: Determining the Authentication Mode for a DAD
- Example: Determining the Authentication Mode for All DADs
- Example: Showing DAD Authorizations that Are Not in Effect
- Examining Embedded PL/SQL Gateway Configuration
- Invoking PL/SQL Stored Subprograms Through Embedded PL/SQL Gateway
- Securing Application Access with Embedded PL/SQL Gateway
- Restrictions in Embedded PL/SQL Gateway
- Using Embedded PL/SQL Gateway: Scenario
- Generating HTML Output with PL/SQL
- Passing Parameters to PL/SQL Web Applications
- Passing List and Dropdown-List Parameters from an HTML Form
- Passing Option and Check Box Parameters from an HTML Form
- Passing Entry-Field Parameters from an HTML Form
- Passing Hidden Parameters from an HTML Form
- Uploading a File from an HTML Form
- Submitting a Completed HTML Form
- Handling Missing Input from an HTML Form
- Maintaining State Information Between Web Pages
- Performing Network Operations in PL/SQL Subprograms
- Using Continuous Query Notification (CQN)
- About Object Change Notification (OCN)
- About Query Result Change Notification (QRCN)
- Events that Generate Notifications
- Notification Contents
- Good Candidates for CQN
- Creating CQN Registrations
- Using PL/SQL to Create CQN Registrations
- PL/SQL CQN Registration Interface
- CQN Registration Options
- Prerequisites for Creating CQN Registrations
- Queries that Can Be Registered for Object Change Notification (OCN)
- Queries that Can Be Registered for Query Result Change Notification (QRCN)
- Using PL/SQL to Register Queries for CQN
- Best Practices for CQN Registrations
- Troubleshooting CQN Registrations
- Deleting Registrations
- Configuring CQN: Scenario
- Using OCI to Create CQN Registrations
- Using OCI for Query Result Set Notifications
- Using OCI to Register a Continuous Query Notification
- Using OCI for Client Initiated CQN Registrations
- Using OCI Subscription Handle Attributes for Continuous Query Notification
- OCI_ATTR_CQ_QUERYID Attribute
- Using OCI Continuous Query Notification Descriptors
- Demonstrating Continuous Query Notification in an OCI Sample Program
- Querying CQN Registrations
- Interpreting Notifications
- Coding PL/SQL Subprograms and Packages
- Part IV Advanced Topics for Application Developers
- Choosing a Programming Environment
- Overview of Application Architecture
- Overview of the Program Interface
- Overview of PL/SQL
- Overview of Oracle Database Java Support
- Overview of JavaScript
- Multilingual Engine Overview
- MLE Concepts
- Understanding MLE Execution Context and Runtime Isolation
- MLE Environment Overview
- JavaScript MLE Modules Overview
- JavaScript MLE Call Specification Overview
- Invoking JavaScript in the Database
- Invoking JavaScript Using MLE Modules
- Invoking JavaScript Using Dynamic MLE Execution
- Privileges for Working with JavaScript in MLE
- Other Supported MLE Features
- Choosing PL/SQL, Java, or JavaScript
- Overview of Precompilers
- Overview of OCI and OCCI
- Comparison of Precompilers and OCI
- Overview of Oracle Data Provider for .NET (ODP.NET)
- Overview of OraOLEDB
- Developing Applications with Multiple Programming Languages
- Overview of Multilanguage Programs
- What Is an External Procedure?
- Overview of Call Specification for External Procedures
- Loading External Procedures
- Publishing External Procedures
- Publishing Java Class Methods
- Publishing External C Procedures
- Locations of Call Specifications
- Example: Locating a Call Specification in a PL/SQL Package
- Example: Locating a Call Specification in a PL/SQL Package Body
- Example: Locating a Call Specification in an ADT Specification
- Example: Locating a Call Specification in an ADT Body
- Example: Java with AUTHID
- Example: C with Optional AUTHID
- Example: Mixing Call Specifications in a Package
- Passing Parameters to External C Procedures with Call Specifications
- Running External Procedures with CALL Statements
- Handling Errors and Exceptions in Multilanguage Programs
- Using Service Routines with External C Procedures
- Doing Callbacks with External C Procedures
- Using Oracle Flashback Technology
- Overview of Oracle Flashback Technology
- Configuring Your Database for Oracle Flashback Technology
- Using Oracle Flashback Query (SELECT AS OF)
- Using Oracle Flashback Version Query
- Using Oracle Flashback Transaction Query
- Using Oracle Flashback Transaction Query with Oracle Flashback Version Query
- Using DBMS_FLASHBACK Package
- Using Flashback Transaction
- Using Flashback Time Travel
- DDL Statements on Tables Enabled for Flashback Archive
- Creating a Flashback Archive
- Altering a Flashback Archive
- Dropping a Flashback Archive
- Specifying the Default Flashback Archive
- Enabling and Disabling Flashback Archive
- Viewing Flashback Archive Data
- Transporting Flashback Archive Data between Databases
- Flashback Time Travel Scenarios
- Protecting Flashback Archive Data
- Managing Audit and Virtual Private Database Policies
- General Guidelines for Oracle Flashback Technology
- Oracle Virtual Private Database Policies and Oracle Flashback Time Travel
- Performance Guidelines for Oracle Flashback Technology
- Multitenant Container Database Restrictions for Oracle Flashback Technology
- Developing Applications with the Publish-Subscribe Model
- Using the Oracle Database ODBC Driver
- Oracle True Cache: Redis Server and Active Data Guard
- Using the Identity Code Package
- Identity Concepts
- What Is the Identity Code Package?
- Using the Identity Code Package
- Storing RFID Tags in Oracle Database Using MGD_ID ADT
- Creating a Table with MGD_ID Column Type and Storing EPC Tag Encodings in the Column
- Constructing MGD_ID Objects to Represent RFID Tags
- Constructing an MGD_ID Object (SGTIN-64) Passing in the Category ID and a List of Components
- Constructing an MGD_ID object (SGTIN-64) and Passing in the Category ID, the Tag Identifier, and the List of Additional Required Parameters
- Constructing an MGD_ID object (SGTIN-64) and Passing in the Category Name, Category Version (if null, then the latest version is used), and a List of Components
- Constructing an MGD_ID object (SGTIN-64) and Passing in the Category Name and Category Version, the Tag Identifier, and the List of Additional Required Parameters
- Inserting an MGD_ID Object into a Database Table
- Querying MGD_ID Column Type
- Building a Function-Based Index Using the Member Functions of the MGD_ID Column Type
- Using MGD_ID ADT Functions
- Defining a Category of Identity Codes and Adding Encoding Schemes to an Existing Category
- Storing RFID Tags in Oracle Database Using MGD_ID ADT
- Identity Code Package Types
- DBMS_MGD_ID_UTL Package
- Identity Code Metadata Tables and Views
- Electronic Product Code (EPC) Concepts
- RFID Technology and EPC v1.1 Coding Schemes
- Product Code Concepts and Their Current Use
- Electronic Product Code (EPC)
- Global Trade Identification Number (GTIN) and Serializable Global Trade Identification Number (SGTIN)
- Serial Shipping Container Code (SSCC)
- Global Location Number (GLN) and Serializable Global Location Number (SGLN)
- Global Returnable Asset Identifier (GRAI)
- Global Individual Asset Identifier (GIAI)
- RFID EPC Network
- Oracle Database Tag Data Translation Schema
- Microservices Architecture
- Oracle Backend for Microservices and AI
- Developing Applications with Sagas
- Implementing Sagas with Oracle Database
- Oracle Saga Framework Overview
- Saga Framework Features
- Saga Framework Concepts
- Initializing the Saga Framework
- Setting Up a Saga Topology
- Managing a Saga Using the PL/SQL Interface
- Developing Java Applications Using Saga Annotations
- Finalizing a Saga Explicitly
- AfterSaga Callbacks
- Using Lock-Free Reservation
- About Concurrency in Transaction Processing
- Lock-Free Reservation Terminology
- Lock-Free Reservation
- Benefits of Using Lock-Free Reservation
- Guidelines and Restrictions for Lock-Free Reservation
- Developing Applications with Oracle XA
- X/Open Distributed Transaction Processing (DTP)
- Oracle XA Library Subprograms
- Developing and Installing XA Applications
- DBA or System Administrator Responsibilities
- Application Developer Responsibilities
- Defining the xa_open String
- Using Oracle XA with Precompilers
- Using Oracle XA with OCI
- Managing Transaction Control with Oracle XA
- Examples of Precompiler Applications
- Migrating Precompiler or OCI Applications to TPM Applications
- Managing Oracle XA Library Thread Safety
- Using the DBMS_XA Package
- Troubleshooting XA Applications
- Oracle XA Issues and Restrictions
- Developing Applications with Sessionless Transactions
- Introduction to Managing Transactions and Sessionless Transactions
- Sessionless Transactions Overview
- Sessionless Transactions Capabilities
- Benefits of Sessionless Transactions
- Using Sessionless Transactions
- Understanding Active Sessionless Transactions
- Understanding the Lifecycle of Sessionless Transactions
- Understanding Server Round Trips and Pre-call and Post-call Functions
- Prerequisites for Using Sessionless Transactions
- Setting a Global Transaction ID
- Starting a New Sessionless Transaction
- Retrieving a Global Transaction ID
- Suspending a Sessionless Transaction
- Resuming a Suspended Sessionless Transaction
- Finalizing a Sessionless Transaction
- Example: Sessionless Transactions with OCI API
- Rules and Guidelines for Using Sessionless Transactions
- Error Messages and Notifications
- Sessionless Transactions and Oracle Coordinated Distributed Transaction Interoperability
- Promoting a Sessionless Transaction to an XA Transaction
- Restrictions for Sessionless Transactions
- Draining Sessionless Transactions
- Understanding Schema Object Dependency
- Overview of Schema Object Dependency
- Querying Object Dependencies
- Object Status
- Invalidation of Dependent Objects
- Guidelines for Reducing Invalidation
- Object Revalidation
- Name Resolution in Schema Scope
- Local Dependency Management
- Remote Dependency Management
- Remote Procedure Call (RPC) Dependency Management
- Shared SQL Dependency Management
- Using Edition-Based Redefinition
- Overview of Edition-Based Redefinition
- Editions
- Editioned and Noneditioned Objects
- Creating an Edition
- Editioned Objects and Copy-on-Change
- Making an Edition Available to Some Users
- Making an Edition Available to All Users
- Current Edition and Session Edition
- Retiring an Edition
- Dropping an Edition
- Editions and Audit Policies
- Editioning Views
- Crossedition Triggers
- Displaying Information About EBR Features
- Using EBR to Upgrade an Application
- Preparing Your Application to Use Editioning Views
- Procedure for EBR Using Only Editions
- Procedure for EBR Using Editioning Views
- Procedure for EBR Using Crossedition Triggers
- Rolling Back the Application Upgrade
- Reclaiming Space Occupied by Unused Table Columns
- Example: Using EBR to Upgrade an Application
- Using Transaction Guard
- Problem That Transaction Guard Solves
- Solution That Transaction Guard Provides
- Transaction Guard Concepts and Scope
- Database Configuration for Transaction Guard
- Developing Applications That Use Transaction Guard
- Transaction Guard and Its Relationship to Application Continuity
- Transaction Guard Support during DBMS_ROLLING Operations
- Table DDL Change Notification
- Overview of Table DDL Change Notification
- Table DDL Change Notification Terminology
- Benefits of Table DDL Change Notification
- Features of Table DDL Change Notification
- Using Table DDL Change Notification
- Registering for Table DDL Change Notification
- Unregistering for Table DDL Change Notifications
- Supported DDL Events and Commands
- Monitoring Table DDL Change Notification
- Choosing a Programming Environment
- Troubleshooting the Saga Framework
- Troubleshooting UTL_HTTP
- Recording DML Changes on the Tracked Table