Table of Contents
- List of Tables
 - Title and Copyright Information
 - Preface
 - Changes in This Release for Pro*C/C++ Programmer's Guide
 - Part I  Introduction and Concepts 
                  
- 1
                             Introduction
                     
                        
- 1.1 What is an Oracle Precompiler?
 - 1.2 Why Use the Oracle Pro*C/C++ Precompiler
 - 1.3 Why Use SQL
 - 1.4 Why Use PL/SQL
 - 1.5 Pro*C/C++ Precompiler Benefits
 - 1.6 Directory Structure
 - 1.7 Library Files
 - 1.8
                                  Frequently Asked Questions
                           
                              
- 1.8.1 What is a VARCHAR?
 - 1.8.2 Does Pro*C/C++ Generate Calls to the Oracle Call Interface?
 - 1.8.3 Why Not Code Using SQLLIB Calls and Not Use Pro*C/C++?
 - 1.8.4 Can I Call A PL/SQL Stored Procedure From a Pro*C/C++ Program?
 - 1.8.5 Can I Write C++ Code, and Precompile It Using Pro*C/C++?
 - 1.8.6 Can I Use Bind Variables Anywhere in a SQL Statement?
 - 1.8.7 I Am Confused By Character Handling in Pro*C/C++.
 - 1.8.8 Is There Anything Special About Character Pointers?
 - 1.8.9 Why Does SPOOL Not Work in Pro*C/C++?
 - 1.8.10 Where Can I Find The On-line Versions of the Example Programs?
 - 1.8.11 How Can I Compile and Link My Application?
 - 1.8.12 Does Pro*C/C++ Now Support Using Structures As Host Variables?
 - 1.8.13 Is It Possible to Have Recursive Functions In Pro*C/C++ If I Use Embedded SQL In the Function?
 - 1.8.14 Can I Use Any Release of Pro*C/C++ with Any Version of the Oracle Server?
 - 1.8.15 When My Application Runs, I Keep Getting an Ora-1405 Error (Fetched Column Value Is NULL).
 - 1.8.16 Are All SQLLIB Functions Private?
 - 1.8.17 How Does Oracle Support The New Object Types?
 - 1.8.18 Compatibility, Upgrading, and Migration
 
 
 - 2
                             Precompiler Concepts
                     
                        
- 2.1
                                  Key Concepts of Embedded SQL Programming 
                           
                              
- 2.1.1 Embedded SQL Statements
 - 2.1.2 Embedded SQL Syntax
 - 2.1.3 Static Versus Dynamic SQL Statements
 - 2.1.4 Embedded PL/SQL Blocks
 - 2.1.5 Host and Indicator Variables
 - 2.1.6 Oracle Datatypes
 - 2.1.7 Arrays
 - 2.1.8 Datatype Equivalencing
 - 2.1.9 Private SQL Areas, Cursors, and Active Sets
 - 2.1.10 Transactions
 - 2.1.11 Errors and Warnings
 - 2.1.12 SQL99 Syntax Support
 
 - 2.2 Steps in Developing an Embedded SQL Application
 - 2.3 Guidelines for Programming
 - 2.4 Conditional Precompilation
 - 2.5 Precompile Separately
 - 2.6 Compile and Link
 - 2.7 Example Tables
 - 2.8 Example Program: A Simple Query
 - 2.9 Example Program: A Simple Query using SQL99 Syntax
 
 - 2.1
                                  Key Concepts of Embedded SQL Programming 
                           
                              
 - 3
                             Database Concepts
                     
                        
- 3.1 Connect to the Database
 - 3.2 Advanced Connection Options
 - 3.3 Definitions of Transactions Terms
 - 3.4 How Data Integrity Is Ensured
 - 3.5 How to Begin and End Transactions
 - 3.6 Using the COMMIT Statement
 - 3.7 Using the SAVEPOINT Statement
 - 3.8 The ROLLBACK Statement
 - 3.9 The RELEASE Option
 - 3.10 The SET TRANSACTION Statement
 - 3.11 Override Default Locking
 - 3.12 Fetch Across COMMITs
 - 3.13 Distributed Transactions Handling
 - 3.14 Guidelines
 
 - 4
                             Datatypes and Host Variables
                     
                        
- 4.1
                                  Oracle Datatypes 
                           
                              
- 4.1.1 Internal Datatypes
 - 4.1.2
                                        External Datatypes
                                 
                                    
- 4.1.2.1 VARCHAR2
 - 4.1.2.2 NUMBER
 - 4.1.2.3 INTEGER
 - 4.1.2.4 FLOAT
 - 4.1.2.5 STRING
 - 4.1.2.6 VARNUM
 - 4.1.2.7 LONG
 - 4.1.2.8 VARCHAR
 - 4.1.2.9 ROWID
 - 4.1.2.10 DATE
 - 4.1.2.11 RAW
 - 4.1.2.12 VARRAW
 - 4.1.2.13 LONG RAW
 - 4.1.2.14 UNSIGNED
 - 4.1.2.15 LONG VARCHAR
 - 4.1.2.16 LONG VARRAW
 - 4.1.2.17 CHAR
 - 4.1.2.18 CHARZ
 - 4.1.2.19 CHARF
 
 - 4.1.3 Additional External Datatypes
 
 - 4.2 Host Variables
 - 4.3 Indicator Variables
 - 4.4 VARCHAR Variables
 - 4.5 Cursor Variables
 - 4.6 CONTEXT Variables
 - 4.7 Universal ROWIDs
 - 4.8 Host Structures
 - 4.9 Pointer Variables
 - 4.10 Globalization Support
 - 4.11 NCHAR Variables
 
 - 4.1
                                  Oracle Datatypes 
                           
                              
 - 5
                             Advanced Topics
                     
                        
- 5.1 Character Data
 - 5.2 Datatype Conversion
 - 5.3 Datatype Equivalencing
 - 5.4
                                  The C Preprocessor
                           
                              
- 5.4.1 How the Pro*C/C++ Preprocessor Works
 - 5.4.2 Preprocessor Directives
 - 5.4.3 ORA_PROC Macro
 - 5.4.4 Location of Header File Specification
 - 5.4.5 Some Preprocessor Examples
 - 5.4.6 SQL Statements Not Allowed in #include
 - 5.4.7 Include the SQLCA, ORACA, and SQLDA
 - 5.4.8 EXEC SQL INCLUDE and #include Summary
 - 5.4.9 Defined Macros
 - 5.4.10 Include Files
 
 - 5.5 Precompiled Header Files
 - 5.6 The Oracle Preprocessor
 - 5.7 Evaluation of Numeric Constants
 - 5.8 SQLLIB Extensions for OCI Release 8 Interoperability
 - 5.9 Interface to OCI Release 8
 - 5.10 Embedded OCI Release 7 Calls
 - 5.11 New Names for SQLLIB Public Functions
 - 5.12 X/Open Application Development
 
 - 6
                             Embedded SQL
                     
                        
- 6.1 Host Variables
 - 6.2 Indicator Variables
 - 6.3 The Basic SQL Statements
 - 6.4 The DML Returning Clause
 - 6.5 Cursors
 - 6.6 Scrollable Cursors
 - 6.7 Optimizer Hints
 - 6.8 Fix Execution Plan
 - 6.9 The CURRENT OF Clause
 - 6.10 The Cursor Statements
 - 6.11 A Complete Example Using Non-Scrollable Cursor
 - 6.12 A Complete Example Using Scrollable Cursor
 - 6.13 Positioned Update
 
 - 7 Embedded PL/SQL
 - 8
                             Host Arrays
                     
                        
- 8.1 Why Use Arrays?
 - 8.2 About Declaring Host Arrays
 - 8.3 About Using Arrays in SQL Statements
 - 8.4
                                  About Selecting into Arrays
                           
                              
- 8.4.1 Cursor Fetches
 - 8.4.2 About Using sqlca.sqlerrd[2]
 - 8.4.3 Number of Rows Fetched
 - 8.4.4 Scrollable Cursor Fetches
 - 8.4.5 Sample Program 3: Host Arrays
 - 8.4.6 Sample Program: Host Arrays Using Scrollable Cursor
 - 8.4.7 Host Array Restrictions
 - 8.4.8 About Fetching NULLs
 - 8.4.9 About Fetching Truncated Values
 
 - 8.5 About Inserting with Arrays
 - 8.6 About Updating with Arrays
 - 8.7 About Deleting with Arrays
 - 8.8 About Using the FOR Clause
 - 8.9 About Using the WHERE Clause
 - 8.10
                                  Arrays of Structs
                           
                              
- 8.10.1 Arrays of Structs Usage
 - 8.10.2 Restrictions on Arrays of Structs
 - 8.10.3 About Declaring an Array of Structs
 - 8.10.4 Variables Guidelines
 - 8.10.5 About Declaring a Pointer to an Array of Structs
 - 8.10.6
                                        Examples
                                 
                                    
- 8.10.6.1 Example 1: A Simple Array of Structs of Scalars
 - 8.10.6.2 Example 2: Using Mixed Scalar Arrays with An Array of Structs
 - 8.10.6.3 Example 3: Using Multiple Arrays of Structs with a Cursor
 - 8.10.6.4 Example 4: Individual Array and Struct Member Referencing
 - 8.10.6.5 Example 5: Using Indicator Variables, a Special Case
 - 8.10.6.6 Example 6: Using a Pointer to an Array of Structs
 
 
 - 8.11 About Mimicking CURRENT OF
 - 8.12 About Using Additional Array Insert/Select Syntax
 - 8.13 About Using Implicit Buffered Insert
 - 8.14 Scrollable Cursors
 
 - 9
                             Handling Runtime Errors
                     
                        
- 9.1 The Need for Error Handling
 - 9.2 Error Handling Alternatives
 - 9.3 The SQLSTATE Status Variable
 - 9.4 About Declaring SQLCODE
 - 9.5 Key Components of Error Reporting Using the SQLCA
 - 9.6 Using the SQL Communications Area (SQLCA)
 - 9.7 About Getting the Full Text of Error Messages
 - 9.8 About Using the WHENEVER Directive
 - 9.9 About Obtaining the Text of SQL Statements
 - 9.10
                                  About Using the Oracle Communications Area (ORACA) 
                           
                              
- 9.10.1 About Declaring the ORACA
 - 9.10.2 About Enabling the ORACA
 - 9.10.3 ORACA Contents
 - 9.10.4 About Choosing Runtime Options
 - 9.10.5
                                        Structure of the ORACA 
                                 
                                    
- 9.10.5.1 oracaid
 - 9.10.5.2 oracabc
 - 9.10.5.3 oracchf
 - 9.10.5.4 oradbgf
 - 9.10.5.5 orahchf
 - 9.10.5.6 orastxtf
 - 9.10.5.7 Diagnostics
 - 9.10.5.8 orastxt
 - 9.10.5.9 orasfnm
 - 9.10.5.10 oraslnr
 - 9.10.5.11 Cursor Cache Statistics
 - 9.10.5.12 orahoc
 - 9.10.5.13 oramoc
 - 9.10.5.14 oracoc
 - 9.10.5.15 oranor
 - 9.10.5.16 oranpr
 - 9.10.5.17 oranex
 
 - 9.10.6 ORACA Example
 
 
 - 10
                             	Precompiler Options
                     
                        
- 10.1 The Precompiler Command
 - 10.2 Precompiler Options
 - 10.3 Quick Reference
 - 10.4 Entering Options
 - 10.5
                                  About Using the Precompiler Options 
                           
                              
- 10.5.1 AUTO_CONNECT
 - 10.5.2 CHAR_MAP
 - 10.5.3 CINCR
 - 10.5.4 CLOSE_ON_COMMIT
 - 10.5.5 CMAX
 - 10.5.6 CMIN
 - 10.5.7 CNOWAIT
 - 10.5.8 CODE
 - 10.5.9 COMMON_PARSER
 - 10.5.10 COMP_CHARSET
 - 10.5.11 CONFIG
 - 10.5.12 CPOOL
 - 10.5.13 CPP_SUFFIX
 - 10.5.14 CTIMEOUT
 - 10.5.15 DB2_ARRAY
 - 10.5.16 DBMS
 - 10.5.17 DEF_SQLCODE
 - 10.5.18 DEFINE
 - 10.5.19 DURATION
 - 10.5.20 DYNAMIC
 - 10.5.21 ERRORS
 - 10.5.22 ERRTYPE
 - 10.5.23 EVENTS
 - 10.5.24 FIPS
 - 10.5.25 HEADER
 - 10.5.26 HOLD_CURSOR
 - 10.5.27 IMPLICIT_SVPT
 - 10.5.28 INAME
 - 10.5.29 INCLUDE
 - 10.5.30 INTYPE
 - 10.5.31 LINES
 - 10.5.32 LNAME
 - 10.5.33 LTYPE
 - 10.5.34 MAX_ROW_INSERT
 - 10.5.35 MAXLITERAL
 - 10.5.36 MAXOPENCURSORS
 - 10.5.37 MODE
 - 10.5.38 NATIVE_TYPES
 - 10.5.39 NLS_CHAR
 - 10.5.40 NLS_LOCAL
 - 10.5.41 OBJECTS
 - 10.5.42 ONAME
 - 10.5.43 ORACA
 - 10.5.44 OUTLINE
 - 10.5.45 OUTLNPREFIX
 - 10.5.46 PAGELEN
 - 10.5.47 PARSE
 - 10.5.48 PLAN_BASELINE
 - 10.5.49 PLAN_PREFIX
 - 10.5.50 PLAN_RUN
 - 10.5.51 PLAN_FIXED
 - 10.5.52 PLAN_ENABLED
 - 10.5.53 MEMFORPREFETCH
 - 10.5.54 PREFETCH
 - 10.5.55 RELEASE_CURSOR
 - 10.5.56 RUNOUTLINE
 - 10.5.57 SELECT_ERROR
 - 10.5.58 STMT_CACHE
 - 10.5.59 SYS_INCLUDE
 - 10.5.60 THREADS
 - 10.5.61 TYPE_CODE
 - 10.5.62 UNSAFE_NULL
 - 10.5.63 USERID
 - 10.5.64 UTF16_CHARSET
 - 10.5.65 VARCHAR
 - 10.5.66 VERSION
 
 
 - 11 Multithreaded Applications
 
 - 1
                             Introduction
                     
                        
 - Part II  Applications 
                  
- 12 C++ Applications
 - 13
                             Oracle Dynamic SQL
                     
                        
- 13.1 What is Dynamic SQL?
 - 13.2 Advantages and Disadvantages of Dynamic SQL
 - 13.3 When to Use Dynamic SQL
 - 13.4 Requirements for Dynamic SQL Statements
 - 13.5 How Dynamic SQL Statements are Processed
 - 13.6 Methods for Using Dynamic SQL
 - 13.7 Using Method 1
 - 13.8 Using Method 2
 - 13.9 Using Method 3
 - 13.10 Using Method 4
 - 13.11 About Using the DECLARE STATEMENT Statement
 - 13.12 About Using PL/SQL
 - 13.13 Dynamic SQL Statement Caching
 
 - 14
                             	ANSI Dynamic SQL
                     
                        
- 14.1 Basics of ANSI Dynamic SQL
 - 14.2 Overview of ANSI SQL Statements
 - 14.3 Oracle Extensions
 - 14.4 ANSI Dynamic SQL Precompiler Options
 - 14.5
                                  Full Syntax of the Dynamic SQL Statements
                           
                              
- 14.5.1 ALLOCATE DESCRIPTOR
 - 14.5.2 DEALLOCATE DESCRIPTOR
 - 14.5.3 GET DESCRIPTOR
 - 14.5.4 SET DESCRIPTOR
 - 14.5.5 Use of PREPARE
 - 14.5.6 DESCRIBE INPUT
 - 14.5.7 DESCRIBE OUTPUT
 - 14.5.8 EXECUTE
 - 14.5.9 Use of EXECUTE IMMEDIATE
 - 14.5.10 Use of DYNAMIC DECLARE CURSOR
 - 14.5.11 OPEN Cursor
 - 14.5.12 FETCH
 - 14.5.13 CLOSE a Dynamic Cursor
 - 14.5.14 Differences From Oracle Dynamic Method 4
 - 14.5.15 Restrictions (ANSI Dynamic SQL)
 
 - 14.6 Example Programs
 
 - 15
                              Oracle Dynamic SQL:  Method 4
                     
                        
- 15.1 Meeting the Special Requirements of Method 4
 - 15.2 Understanding the SQLDA
 - 15.3 About Using the SQLDA Variables
 - 15.4 Some Preliminaries
 - 15.5 The Basic Steps
 - 15.6
                                  A Closer Look at Each Step 
                           
                              
- 15.6.1 Declare a Host String
 - 15.6.2 Declare the SQLDAs
 - 15.6.3 Allocate Storage Space for the Descriptors
 - 15.6.4 Set the Maximum Number to DESCRIBE
 - 15.6.5 Put the Query Text in the Host String
 - 15.6.6 PREPARE the Query from the Host String
 - 15.6.7 DECLARE a Cursor
 - 15.6.8 DESCRIBE the Bind Variables
 - 15.6.9 Reset Number of Placeholders
 - 15.6.10 Get Values and Allocate Storage for Bind Variables
 - 15.6.11 OPEN the Cursor
 - 15.6.12 DESCRIBE the Select List
 - 15.6.13 Reset Number of Select-List Items
 - 15.6.14 Reset Length/Datatype of Each Select-list Item
 - 15.6.15 FETCH Rows from the Active Set
 - 15.6.16 Get and Process Select-List Values
 - 15.6.17 Deallocate Storage
 - 15.6.18 CLOSE the Cursor
 - 15.6.19 About Using Host Arrays
 - 15.6.20 sample12.pc
 
 - 15.7 Example Program: Dynamic SQL Method 4
 - 15.8 Sample Program : Dynamic SQL Method 4 using Scrollable Cursors
 
 - 16
                             LOBs
                     
                        
- 16.1 What are LOBs?
 - 16.2 How to Use LOBs in Your Program
 - 16.3 Rules for LOB Statements
 - 16.4
                                  LOB Statements
                           
                              
- 16.4.1 APPEND
 - 16.4.2 ASSIGN
 - 16.4.3 CLOSE (for LOBs)
 - 16.4.4 COPY
 - 16.4.5 CREATE TEMPORARY
 - 16.4.6 DISABLE BUFFERING
 - 16.4.7 ENABLE BUFFERING
 - 16.4.8 ERASE
 - 16.4.9 FILE CLOSE ALL
 - 16.4.10 FILE SET
 - 16.4.11 FLUSH BUFFER
 - 16.4.12 FREE TEMPORARY
 - 16.4.13 LOAD FROM FILE
 - 16.4.14 OPEN (for LOBs)
 - 16.4.15 READ
 - 16.4.16 TRIM
 - 16.4.17 WRITE
 - 16.4.18 DESCRIBE
 
 - 16.5 LOBs and the Navigational Interface
 - 16.6 LOB Program Examples
 
 - 17
                             Objects
                     
                        
- 17.1 Introduction to Objects
 - 17.2 About Using Object Types in Pro*C/C++
 - 17.3 The Object Cache
 - 17.4 Associative Interface
 - 17.5 Navigational Interface
 - 17.6 Converting Object Attributes and C Types
 - 17.7 Object Options Set/Get
 - 17.8 New Precompiler Options for Objects
 - 17.9 An Object Example in Pro*C/C++
 - 17.10 Example Code for Type Inheritance
 - 17.11 Example Code for Navigational Access
 - 17.12 About Using C Structures
 - 17.13 About Using REFs
 - 17.14 About Using OCIDate, OCIString, OCINumber, and OCIRaw
 - 17.15 Summarizing the New Database Types in Pro*C/C++
 - 17.16 Restrictions on Using Oracle Datatypes in Dynamic SQL
 
 - 18 Collections
 - 19
                             The Object Type Translator
                     
                        
- 19.1 OTT Overview
 - 19.2 What is the Object Type Translator
 - 19.3 AUsing OTT with OCI Applications
 - 19.4 About Using OTT with Pro*C/C++ Applications
 - 19.5 OTT Reference
 
 - 20
                             User Exits
                     
                        
- 20.1 What Is a User Exit?
 - 20.2 Why Write a User Exit?
 - 20.3 About Developing a User Exit
 - 20.4 About Writing a User Exit
 - 20.5 EXEC TOOLS Statements
 - 20.6 About Calling a User Exit
 - 20.7 About Passing Parameters to a User Exit
 - 20.8 About Returning Values to a Form
 - 20.9 An Example of Using User Exits
 - 20.10 About Precompiling and Compiling a User Exit
 - 20.11 Example Program: A User Exit
 - 20.12 About Using the GENXTB Utility
 - 20.13 About Linking a User Exit into SQL*Forms
 - 20.14 Guidelines
 
 
 -  Appendixes 
                  
- A Reserved Words, Keywords, and Namespaces
 - B
                             	Performance Tuning 
                     
                        
- B.1 What Causes Poor Performance?
 - B.2 How Can Performance Be Improved?
 - B.3 About Using Host Arrays
 - B.4 About Using Embedded PL/SQL
 - B.5 About Optimizing SQL Statements
 - B.6 About Statement Caching
 - B.7 About Using Indexes
 - B.8 About Taking Advantage of Row-Level Locking
 - B.9 About Eliminating Unnecessary Parsing
 - B.10 About Avoiding Unnecessary Reparsing
 - B.11 About Using Connection Pooling
 
 - C Syntactic and Semantic Checking
 - D
                             	System-Specific References
                     
                        
- D.1
                                  System-Specific Information
                           
                              
- D.1.1 Location of Standard Header Files
 - D.1.2 About Specifying Location of Included Files for the C Compiler
 - D.1.3 ANSI C Support
 - D.1.4 Struct Component Alignment
 - D.1.5 Size of an Integer and ROWID
 - D.1.6 Byte Ordering
 - D.1.7 About Connecting to the Oracle Server
 - D.1.8 About Linking in an XA Library
 - D.1.9 Location of the Pro*C/C++ Executable
 - D.1.10 System Configuration File
 - D.1.11 INCLUDE Option Syntax
 - D.1.12 About Compiling and Linking
 - D.1.13 User Exits
 
 
 - D.1
                                  System-Specific Information
                           
                              
 - E
                             	Embedded SQL Statements and Directives 
                     
                        
- E.1 Summary of Precompiler Directives and Embedded SQL Statements
 - E.2 About The Statement Descriptions
 - E.3 How to Read Syntax Diagrams
 - E.4 ALLOCATE (Executable Embedded SQL Extension)
 - E.5 ALLOCATE DESCRIPTOR (Executable Embedded SQL)
 - E.6 CACHE FREE ALL (Executable Embedded SQL Extension)
 - E.7 CALL (Executable Embedded SQL)
 - E.8 CLOSE (Executable Embedded SQL)
 - E.9 COLLECTION APPEND (Executable Embedded SQL Extension)
 - E.10 COLLECTION DESCRIBE (Executable Embedded SQL Extension)
 - E.11 COLLECTION GET (Executable Embedded SQL Extension)
 - E.12 COLLECTION RESET (Executable Embedded SQL Extension)
 - E.13 COLLECTION SET (Executable Embedded SQL Extension)
 - E.14 COLLECTION TRIM (Executable Embedded SQL Extension)
 - E.15 COMMIT (Executable Embedded SQL)
 - E.16 CONNECT (Executable Embedded SQL Extension)
 - E.17 CONTEXT ALLOCATE (Executable Embedded SQL Extension)
 - E.18 CONTEXT FREE (Executable Embedded SQL Extension)
 - E.19 CONTEXT OBJECT OPTION GET (Executable Embedded SQL Extension)
 - E.20 CONTEXT OBJECT OPTION SET (Executable Embedded SQL Ext)
 - E.21 CONTEXT USE (Oracle Embedded SQL Directive)
 - E.22 DEALLOCATE DESCRIPTOR (Embedded SQL Statement)
 - E.23 DECLARE CURSOR (Embedded SQL Directive)
 - E.24 DECLARE DATABASE (Oracle Embedded SQL Directive)
 - E.25 DECLARE STATEMENT (Embedded SQL Directive)
 - E.26 DECLARE TABLE (Oracle Embedded SQL Directive)
 - E.27 DECLARE TYPE (Oracle Embedded SQL Directive)
 - E.28 DELETE (Executable Embedded SQL)
 - E.29 DESCRIBE (Executable Embedded SQL Extension)
 - E.30 DESCRIBE DESCRIPTOR (Executable Embedded SQL)
 - E.31 ENABLE THREADS (Executable Embedded SQL Extension)
 - E.32 EXECUTE ... END-EXEC (Executable Embedded SQL Extension)
 - E.33 EXECUTE (Executable Embedded SQL)
 - E.34 EXECUTE DESCRIPTOR (Executable Embedded SQL)
 - E.35 EXECUTE IMMEDIATE (Executable Embedded SQL)
 - E.36 FETCH (Executable Embedded SQL)
 - E.37 FETCH DESCRIPTOR (Executable Embedded SQL)
 - E.38 FREE (Executable Embedded SQL Extension)
 - E.39 GET DESCRIPTOR (Executable Embedded SQL)
 - E.40 INSERT (Executable Embedded SQL)
 - E.41 LOB APPEND (Executable Embedded SQL Extension)
 - E.42 LOB ASSIGN (Executable Embedded SQL Extension)
 - E.43 LOB CLOSE (Executable Embedded SQL Extension)
 - E.44 LOB COPY (Executable Embedded SQL Extension)
 - E.45 LOB CREATE TEMPORARY (Executable Embedded SQL Extension)
 - E.46 LOB DESCRIBE (Executable Embedded SQL Extension)
 - E.47 LOB DISABLE BUFFERING (Executable Embedded SQL Extension)
 - E.48 LOB ENABLE BUFFERING (Executable Embedded SQL Extension)
 - E.49 LOB ERASE (Executable Embedded SQL Extension)
 - E.50 LOB FILE CLOSE ALL (Executable Embedded SQL Extension)
 - E.51 LOB FILE SET (Executable Embedded SQL Extension)
 - E.52 LOB FLUSH BUFFER (Executable Embedded SQL Extension)
 - E.53 LOB FREE TEMPORARY (Executable Embedded SQL Extension)
 - E.54 LOB LOAD (Executable Embedded SQL Extension)
 - E.55 LOB OPEN (Executable Embedded SQL Extension)
 - E.56 LOB READ (Executable Embedded SQL Extension)
 - E.57 LOB TRIM (Executable Embedded SQL Extension)
 - E.58 LOB WRITE (Executable Embedded SQL Extension)
 - E.59 OBJECT CREATE (Executable Embedded SQL Extension)
 - E.60 OBJECT DELETE (Executable Embedded SQL Extension)
 - E.61 OBJECT DEREF (Executable Embedded SQL Extension)
 - E.62 OBJECT FLUSH (Executable Embedded SQL Extension)
 - E.63 OBJECT GET (Executable Embedded SQL Extension)
 - E.64 OBJECT RELEASE (Executable Embedded SQL Extension)
 - E.65 OBJECT SET (Executable Embedded SQL Extension)
 - E.66 OBJECT UPDATE (Executable Embedded SQL Extension)
 - E.67 OPEN (Executable Embedded SQL)
 - E.68 OPEN DESCRIPTOR (Executable Embedded SQL)
 - E.69 PREPARE (Executable Embedded SQL)
 - E.70 REGISTER CONNECT (Executable Embedded SQL Extension)
 - E.71 ROLLBACK (Executable Embedded SQL)
 - E.72 SAVEPOINT (Executable Embedded SQL)
 - E.73 SELECT (Executable Embedded SQL)
 - E.74 SET DESCRIPTOR (Executable Embedded SQL)
 - E.75 TYPE (Oracle Embedded SQL Directive)
 - E.76 UPDATE (Executable Embedded SQL)
 - E.77 VAR (Oracle Embedded SQL Directive)
 - E.78 WHENEVER (Embedded SQL Directive)
 
 - F Sample Programs
 - G Integrating Pro*C/C++ into Microsoft Visual Studio .NET
 
 - Index