Pro*C/C++ Precompiler Programmer's Guide
Release 8.0






Prev Next


This manual is a comprehensive user's guide and on-the-job reference to the Pro*C/C++ Precompiler. It shows you how to use the database language SQL and Oracle's procedural extension, PL/SQL, in conjunction with Pro*C/C++ to manipulate data in an Oracle8 database. It explores a full range of topics, from underlying concepts to advanced programming techniques, and uses code examples.

Support for Objects and for the Object Type Translator are available only if you have purchased the Oracle8 Enterprise Edition with the Objects Option.

Topics are:

What This Guide Has to Offer

This Guide shows you how the Oracle Pro*C/C++ Precompiler and embedded SQL can benefit your entire applications development process. It gives you the know-how to design and develop applications that harness the power of Oracle. And, as quickly as possible, it helps you become proficient in writing embedded SQL programs.

An important feature of this Guide is its emphasis on getting the most out of Pro*C/C++ and embedded SQL. To help you master these tools, this Guide shows you all the "tricks of the trade" including ways to improve program performance. It also includes many program examples to better your understanding and demonstrate the usefulness of embedded SQL and embedded PL/SQL.

Note: You will not find installation instructions or other system-specific information in this Guide; refer to your system-specific Oracle documentation.

Who Should Read This Guide?

Anyone developing new applications or converting existing applications to run in the Oracle environment will benefit from reading this Guide. Written especially for programmers, this comprehensive treatment of the Oracle Pro*C/C++ Precompiler will also be of value to systems analysts, project managers, and others interested in embedded SQL applications. To use this Guide effectively, you need a working knowledge of applications programming in C or C++. It would be helpful to have some familiarity with the SQL database language, although this book will Guide you through most of the complexities of embedded SQL programming.

How the Pro*C/C++ Guide Is Organized

Chapters 1 through 9 present the basics of Pro*C/C++ programming and tell you how to run the precompiler. For many Pro*C/C++ developers, these chapters are sufficient to enable them to write useful and powerful Pro*C/C++ applications.

Later chapters offer more detailed descriptions of Pro*C/C++. They describe some of the more complicated things that you can do with the product, such as writing Pro*C/C++ programs that use dynamic SQL.

Chapter 1, "Introduction":

This chapter introduces you to Pro*C/C++. You look at its role in developing application programs that manipulate Oracle data.

Chapter 2, "Learning the Basics":

This chapter explains how embedded SQL programs do their work. You examine the special environment in which they operate, the impact of this environment on the design of your applications, the key concepts of embedded SQL programming, and the steps you take in developing an application.

Chapter 3, "Developing a Pro*C/C++ Application":

This chapter gives you the basic information you need to develop a Pro*C/C++ application. You learn about migrating from earlier versions. You also learn about the Oracle datatypes, host variables, indicator variables, data conversion, and how to take advantage of datatype equivalencing.

Chapter 4, "Advanced Pro*C/C++ Applications":

This chapter presents advanced topics, such as National Language Support, connecting to Oracle, concurrent connections, developing multi-threaded applications, and interfacing to OCI.

Chapter 5, "Using Embedded SQL":

This chapter teaches you the essentials of embedded SQL programming. You learn how to use host variables, indicator variables, cursors, cursor variables, and the fundamental SQL commands that insert, update, select, and delete Oracle data.

Chapter 6, "Using Embedded PL/SQL":

This chapter shows you how to improve performance by embedding PL/SQL transaction processing blocks in your program. You learn how to use PL/SQL with host variables, indicator variables, cursors, stored procedures, host arrays, and dynamic SQL.

Chapter 7, "Using C++":

This chapter describes how to precompile your C++ application, and lists three sample Pro*C/C++ programs written using C++.

Chapter 8, "Object Support in Pro*C/C++":

This chapter describes object support features: associative and navigational interfaces (embedded SQL commands), precompiler options for objects, and restrictions on the use of Oracle8 types in dynamic SQL.

Chapter 9, "Running the Pro*C/C++ Precompiler":

This chapter details the requirements for running the Oracle Pro*C/C++ Precompiler. You learn what happens during precompilation, how to issue the precompiler command, and how to specify the many useful precompiler options.

Chapter 10, "Defining and Controlling Transactions":

This chapter describes transaction processing. You learn the basic techniques that safeguard the consistency of your database.

Chapter 11, "Handling Runtime Errors":

This chapter discusses error reporting and recovery. It shows you how to use the SQLSTATE and SQLCODE status variables with the WHENEVER statement to detect errors and status changes. It also shows you how to use the SQLCA and ORACA to detect error conditions and diagnose problems.

Chapter 12, "Using Host Arrays":

This chapter looks at using arrays to improve program performance. You learn how to manipulate Oracle data using arrays, how to operate on all the elements of an array with a single SQL statement, and how to limit the number of array elements processed.

Chapter 13, "Using Dynamic SQL":

This chapter shows you how to take advantage of dynamic SQL. You are taught three methods-from simple to complex-for writing flexible programs that, among other things, let users build SQL statements interactively at run time.

Chapter 14, "Using Dynamic SQL: Advanced Concepts":

This chapter gives you an in-depth explanation of Dynamic SQL Method 4-dynamic SQL using descriptors. With this technique, your application can process and execute any SQL statement at runtime.

Chapter 15, "Writing User Exits":

This chapter focuses on writing user exits for Oracle Tools applications. You learn about the commands that are used to interface between a forms application and a Pro*C/C++ user exit, and how to write and link a forms user exit..

Chapter 16, "Using the Object Type Translator": Discusses the Object Type Translator (OTT) which maps object types to C structures that are used in Pro*C/C++ applications. Describes the OTT options, how to use OTT, and the results.

Appendix A, "New Features": This appendix highlights the improvements and new features introduced with this release of Pro*C/C++.

Appendix B, "Oracle Reserved Words, Keywords, and Namespaces": This appendix lists words that have a special meaning to Oracle and namespaces that are reserved for Oracle libraries.

Appendix C, "Performance Tuning": This appendix shows you some simple, easy-to-apply methods for improving the performance of your applications.

Appendix D, "Syntactic and Semantic Checking": This appendix shows you how to use the SQLCHECK option to control the type and extent of syntactic and semantic checking done on embedded SQL statements and PL/SQL blocks.

Appendix E, "System-Specific References": This appendix documents the aspects of Pro*C/C++ that can be system-specific.

Appendix F, "Embedded SQL Commands and Directives": This appendix contains descriptions of precompiler directives, embedded SQL commands, and Oracle embedded SQL extensions.

Conventions Used in This Guide

Important terms being defined for the first time are italicized. In discussions, UPPERCASE is used for database objects and SQL keywords, and italicized lowercase is used for the names of C variables, constants, and parameters. C keywords are in bold face type


The following notation is used in this Guide:

[ ]


Square brackets enclose optional items in syntax



< >


Angle brackets enclose the name of a syntactic element in

syntax descriptions.


{ }


Braces enclose items, only one of which is required.




A vertical bar separates options within brackets or braces.


. .


Two dots separate the lowest and highest values in a range.


. . .


An ellipsis shows that the preceding parameter can be repeated or that statements or clauses irrelevant to the discussion were left out.


ANSI/ISO Compliance

The Pro*C/C++ Precompiler complies fully with the ANSI/ISO SQL standards. Compliance with these standards was certified by the National Institute of Standards and Technology (NIST). To flag extensions to ANSI/ISO SQL, a FIPS Flagger is provided.


ANSI standard X3.135-1992 (known informally as SQL92) provides three levels of compliance:

ANSI standard X3.168-1992 specifies the syntax and semantics for embedding SQL statements in application programs written in a standard programming language such as C.

A conforming SQL implementation must support at least Entry SQL. The Oracle Pro*C/C++ Precompiler does conform to Entry SQL92.

NIST standard FIPS PUB 127-1, which applies to RDBMS software acquired for federal use, also adopts the ANSI standards. In addition, it specifies minimum sizing parameters for database constructs and requires a "FIPS Flagger" to identify ANSI extensions.

For copies of the ANSI standards, write to

American National Standards Institute

1430 Broadway

New York, NY 10018


Migrating an Application

To migrate applications from earlier releases of Pro*C and Pro*C/C++, see Oracle8 Migration.

Your Comments Are Welcome.

The Oracle Corporation technical staff values your Comments. As we write and revise, your opinions are the most important input we receive. Please use the Reader's Comment Form in this manual to tell us what you like and dislike about this Oracle publication.


Copyright © 1997 Oracle Corporation.

All Rights Reserved.