This chapter presents brief overviews of Oracle application development systems.
This chapter contains the following topics:
See Also:Chapter 24, "SQL, PL/SQL, and Java"
Oracle Database developers have a choice of languages for developing applications—C, C++, Java, COBOL, PL/SQL, and Visual Basic. The entire functionality of the database is available in all the languages. All language-specific standards are supported. Developers can choose the languages in which they are most proficient or one that is most suitable for a specific task. For example an application might use Java on the server side to create dynamic Web pages, PL/SQL to implement stored procedures in the database, and C++ to implement computationally intensive logic in the middle tier.
Oracle also provides the Pro* series of precompilers, which allow you to embed SQL and PL/SQL in your C, C++, COBOL, or FORTRAN application programs.
Oracle Database Application Developer's Guide - Fundamentals for information on how to choose a programming environment
This section contains the following topics:
The Oracle Call Interface (OCI) is an application programming interface (API) that lets you create applications that use the native procedures or function calls of a third-generation language to access an Oracle database server and control all phases of SQL statement execution. OCI supports the datatypes, calling conventions, syntax, and semantics of C and C++. OCI can directly access data in Oracle tables or can enqueue and dequeue data into or out of Oracle Streams.
OCI provides the following:
Improved performance and scalability through the use of system memory and network connectivity.
Consistent interfaces for dynamic session and transaction management in a two-tier client/server or multitier environment.
Comprehensive support for application development using Oracle objects.
Access to external databases.
Applications that can service an increasing number of users and requests without additional hardware investments.
OCI lets you manipulate data and schemas in an Oracle database using a host programming language, such as C. It provides a library of standard database access and retrieval functions in the form of a dynamic runtime library (OCI library) that can be linked in an application at runtime. This eliminates the need to embed SQL or PL/SQL within 3GL programs.
An important component of OCI is a set of calls to allow application programs to use a workspace called the object cache. The object cache is a memory block on the client side that allows programs to store entire objects and to navigate among them without round trips to the server.
The object cache is completely under the control and management of the application programs using it. The Oracle database server has no access to it. The application programs using it must maintain data coherency with the server and protect the workspace against simultaneous conflicting access.
OCI provides functions to:
Access, manipulate and manage objects in the object cache by traversing pointers or
Convert Oracle dates, strings and numbers to C datatypes
Manage the size of the object cache's memory
Create transient type descriptions. Transient type descriptions are not stored persistently in the database. Compatibility must be set to Oracle9i or higher.
OCI developers can use the object type translator to generate the C datatypes corresponding to a Oracle object types.
See Also:Oracle Call Interface Programmer's Guide
The Oracle C++ Call Interface (OCCI) is a C++ API that lets you use the object-oriented features, native classes, and methods of the C++ programing language to access the Oracle database. The OCCI interface is modeled on the JDBC interface and, like the JDBC interface, is easy to use. OCCI is built on top of OCI and provides the power and performance of OCI using an object-oriented paradigm.
OCI supports the entire Oracle feature set and provides efficient access to both relational and object data, but it can be challenging to use--particularly if you want to work with complex, object datatypes. Object types are not natively supported in C, and simulating them in C is not easy. OCCI provides a simpler, object-oriented interface to the functionality of OCI. It does this by defining a set of wrappers for OCI. Developers can use the underlying power of OCI to manipulate objects in the server through an object-oriented interface that is significantly easier to program.
The associative relational API and object classes provide SQL access to the database. Through these interfaces, SQL is run on the server to create, manipulate, and fetch object or relational data. Applications can access any dataype on the server, including the following:
The navigational interface is a C++ interface that lets you seamlessly access and modify object-relational data in the form of C++ objects without using SQL. The C++ objects are transparently accessed and stored in the database as needed.
With the OCCI navigational interface, you can retrieve an object and navigate through references from that object to other objects. Server objects are materialized as C++ class instances in the application cache. An application can use OCCI object navigational calls to perform the following functions on the server's objects:
Create, access, lock, delete, and flush objects
Get references to the objects and navigate through them
The Oracle type translator (OTT) is a program that automatically generates C language structure declarations corresponding to object types. It generates C++ class definitions for Oracle object types that can be used by OCCI applications for a native C++ object interface. OTT uses the Pro*C precompiler and the OCI server access package.
An Oracle precompiler is a programming tool that lets you embed SQL statements in a high-level source program. The precompiler accepts the host program as input, translates the embedded SQL statements into standard Oracle run-time library calls, and generates a source program that you can compile, link, and run in the usual way. Oracle precompilers are available (but not on all systems) for C/C++, COBOL, and FORTRAN.
The Oracle Pro*C/C++ Precompiler lets you embed SQL statements in a C or C++ source file. Pro*C/C++ reads the source file as input and outputs a C or C++ source file that replaces the embedded SQL statements with Oracle runtime library calls, and is then compiled by the C or C++ compiler.
Unlike many application development tools, Pro*C/C++ lets you create highly customized applications. For example, you can create user interfaces that incorporate the latest windowing and mouse technology. You can also create applications that run in the background without the need for user interaction.
Furthermore, Pro*C/C++ helps you fine-tune your applications. It allows close monitoring of resource use, SQL statement execution, and various runtime indicators. With this information, you can change program parameters for maximum performance.
Although precompiling adds a step to the application development process, it saves time. The precompiler, not you, translates each embedded SQL statement into calls to the Oracle runtime library (SQLLIB). The Pro*C/C++ precompiler also analyzes host variables, defines mappings of structures into columns, and, with
SQLCHECK=FULL, performs semantic analysis of the embedded SQL statements.
The Oracle Pro*C/C++ precompiler also allows programmers to use object datatypes in C and C++ programs. Pro*C developers can use the Object Type Translator to map Oracle object types and collections into C datatypes to be used in the Pro*C application.
Pro*C provides compile time type checking of object types and collections and automatic type conversion from database types to C datatypes. Pro*C includes an
SQL syntax to create and destroy objects and offers two ways to access objects in the server:
Oracle provides a C API to enable dynamic creation and access of type descriptions. Additionally, you can create transient type descriptions, type descriptions that are not stored persistently in the DBMS.
The C API enables creation and access of
OCIAnyData type models a self descriptive (with regard to type) data instance of a given type.
OCIAnyDataSet type models a set of data instances of a given type.
Oracle also provides SQL datatypes (in Oracle's Open Type System) that correspond to these datatypes.
SYS.ANYTYPE corresponds to
SYS.ANYDATA corresponds to
SYS.ANYDATASET corresponds to
You can create database table columns and SQL queries on such data.
The C API uses the following terms:
Transient types - Type descriptions (type metadata) that are not stored persistently in the database.
Persistent types - SQL types created using the
TYPE SQL statement. Their type descriptions are stored persistently in the database.
Self-descriptive data - Data encapsulating type information along with the actual contents. The
ANYDATA type (
OCIAnyData) models such data. A data value of any SQL type can be converted to an
ANYDATA, which can be converted back to the old data value. An incorrect conversion attempt results in an exception.
Self-descriptive MultiSet - Encapsulation of a set of data instances (all of the same type), along with their type description.
Oracle offers a variety of data access methods from COM-based programming languages, such as Visual Basic and Active Server Pages. These include Oracle Objects for OLE (OO40) and the Oracle Provider for OLE DB. The latter can be used with Microsoft's ActiveX Data Objects (ADO). Server-side programming to COM Automation servers, such as Microsoft Office, is available through the COM Automation Feature. More traditional ODBC access is available through Oracle's ODBC Driver. C/C++ applications can also use the Oracle Call Interface (OCI). These data access drivers have been engineered to provide superior performance with Oracle and expose the database's advanced features which may not be available in third-party drivers.
Oracle also provides optimum .NET data access support through the Oracle Data Provider for .NET, allowing .NET to access advanced Oracle features. Oracle also support OLE DB .NET and ODBC .NET.
This section contains the following topics:
Open database connectivity (ODBC), is a database access protocol that lets you connect to a database and then prepare and run SQL statements against the database. In conjunction with an ODBC driver, an application can access any data source including data stored in spreadsheets, like Excel. Because ODBC is a widely accepted standard API, applications can be written to comply to the ODBC standard. The ODBC driver performs all mappings between the ODBC standard and the particular database the application is accessing. Using a data source-specific driver, an ODBC compliant program can access any data source without any more development effort.
Oracle provides the ODBC interface so that applications of any type that are ODBC compliant can access the Oracle database using the ODBC driver provided by Oracle. For example, an application written in Visual Basic can use ODBC to access the Oracle database.
OO4O consists of the following software layers:
OO4O provides key features for accessing Oracle databases in environments ranging from the typical two-tier client/server applications, such as those developed in Visual Basic or Excel, to application servers deployed in multitiered application server environments, such as Web server applications in Microsoft Internet Information Server (IIS) or Microsoft Transaction Server.
The Oracle Data Control (ODC) is an ActiveX Control designed to simplify the exchange of data between an Oracle database and visual controls, such edit, text, list, and grid controls in Visual Basic and other development tools that support custom controls.
ODC acts an agent to handle the flow of information from an Oracle database and a visual data-aware control, such as a grid control, that is bound to it. The data control manages various user interface (UI) tasks such as displaying and editing data. It also runs and manages the results of database queries.
The Oracle Objects for OLE C++ Class Library is a collection of C++ classes that provide programmatic access to the Oracle Object Server. Although the class library is implemented using OLE Automation, neither the OLE development kit nor any OLE development knowledge is necessary to use it. This library helps C++ developers avoid writing COM client code for accessing the OO4O interfaces.
Oracle Data Provider for .NET (ODP.NET) is an implementation of a data provider for the Oracle database. ODP.NET uses Oracle native APIs for fast and reliable access to Oracle data and features from any .NET application. ODP.NET also uses and inherits classes and interfaces available in the Microsoft .NET Framework Class Library.
For programmers using Oracle Provider for OLE DB, ADO (ActiveX Data Objects) provides an automation layer that exposes an easy programming model.
ADO.NET provides a similar programming model, but without the automation layer, for better performance. More importantly, the ADO.NET model allows native providers such as ODP.NET to expose Oracle-specific features and datatypes.
This section contains the following topics:
The Pro*COBOL Precompiler is a programming tool that lets you embed SQL statements in a host COBOL program. Pro*COBOL reads the source file as input and outputs a COBOL source file that replaces the embedded SQL statements with Oracle runtime library calls, and is then compiled by the COBOL compiler.
Like the Pro*C/C++ Precompiler, Pro*COBOL lets you create highly customized applications. For example, you can create user interfaces that incorporate the latest windowing and mouse technology. You can also create applications that run in the background without the need for user interaction.
Furthermore, with Pro*COBOL you can fine-tune your applications. It enables close monitoring of resource usage, SQL statement execution, and various run-time indicators. With this information, you can adjust program parameters for maximum performance.
See Also:Pro*COBOL Programmer's Guide
Pro*FORTRAN is not supported on Windows.