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
- B.12 About Using Oracle Connection Manager in Traffic Director Mode
- 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