Oracle Call Interface Programmer's Guide, Volumes 1 & 2 Release 8.0 A58234-01 |
|
This chapter introduces you to the Oracle Call Interface, Release 8.0. It gives you background information that you need to develop applications using the OCI. It also introduces special terms that are used in discussing the OCI.
This chapter also discusses the changes in the OCI since release 7.3.
The following topics are covered:
Structured Query Language (SQL) is a nonprocedural language. A program in a nonprocedural language specifies the set of data to be operated on, but does not specify precisely what operations will be performed, or how the operations are to be carried out. The nonprocedural nature of SQL makes it an easy language to learn and to use to perform database transactions. It is also the standard language used to access and manipulate data in modern relational and object-relational database systems.
However, most programming languages, such as C and C++ are procedural. The execution of most statements depends on previous or subsequent statements and on control structures, such as loops or conditional branches, which are not available in SQL. The procedural nature of these languages makes them more complex than SQL, but it also makes them very flexible and powerful.
The Oracle Call Interface (OCI) allows you to develop applications that combine the nonprocedural data access power of SQL with the procedural capabilities of C. The OCI supports all SQL data definition, data manipulation, query, and transaction control facilities that are available through an Oracle8 server.
You can also take advantage of PL/SQL, Oracle's procedural extension to SQL. Thus, the applications you develop can be more powerful and flexible than applications written in SQL alone. The OCI also provides facilities for accessing and manipulating objects in an Oracle8 server.
The OCI is an application programming interface (API) that allows you to manipulate data and schemas in an Oracle database. As Figure 1-1 shows, you compile and link an OCI program in the same way that you compile and link a nondatabase application. There is no need for a separate preprocessing or precompilation step.
Note: On some platforms, it may be necessary to include other libraries, in addition to the OCI library, to properly link your OCI programs. Check your Oracle system-specific documentation for further information about extra libraries that may be required.
One of the main tasks of an OCI application is to process SQL statements. Different types of SQL statements require different processing steps in your program. It is important to take this into account when coding your OCI application.
Oracle8 recognizes eight kinds of SQL statements:
Note: Queries are often classified as DML statements, but OCI applications process queries differently, so they are considered separately here.
Data Definition Language (DDL) statements manage schema objects in the database. DDL statements create new tables, drop old tables, and establish other schema objects. They also control access to schema objects. For example:
CREATE TABLE employees (name VARCHAR2(20), ssn VARCHAR2(12), empno NUMBER(6), mgr NUMBER(6), salary NUMBER(6)) GRANT UPDATE, INSERT, DELETE ON employees TO donna REVOKE UPDATE ON employees FROM jamie
DDL statements also allow you to work with objects in the Oracle8 server, as in the following series of statements which creates an object table:
CREATE TYPE person_t AS OBJECT ( name VARCHAR2(30), ssn VARCHAR2(12), address VARCHAR2(50)) CREATE TABLE person_tab OF person_t
OCI applications treat transaction control, session control, and system control statements like DML statements. See the Oracle8 SQL Reference for information about these types of statements.
Data manipulation language (DML) statements can change data in the database tables. For example, DML statements are used to
DML statements can require an application to supply data to the database using input (bind) variables. See the section "Binding" on page 4-5 for more information about input bind variables.
DML statements also allow you to work with objects in the Oracle8 server, as in the following example, which inserts an instance of type person_t
into the object table person_tab
:
INSERT INTO person_tab VALUES (person_t('Steve May','123-45-6789','146 Winfield Street'))
Queries are statements that retrieve data from a database. A query can return zero, one, or many rows of data. All queries begin with the SQL keyword SELECT, as in the following example:
SELECT dname FROM dept WHERE deptno = 42
Queries access data in tables, and they are often classified with DML statements. However, OCI applications process queries differently, so they are considered separately in this guide.
Queries can require the program to supply data to the database using input (bind) variables, as in the following example:
SELECT name FROM employees WHERE empno = :empnumber
In the above SQL statement, :empnumber
is a placeholder for a value that will be supplied by the application.
When processing a query, an OCI application also needs to define output variables to receive the returned results. In the above statement, you would need to define an output variable to receive any name
values returned from the query.
See Also: See the section "Binding" on page 5-2 for more information about input bind variables.
See the section "Defining" on page 5-13 for information about defining output variables.
See Chapter 4, "SQL Statement Processing", for detailed information about how SQL statements are processed in an OCI program.
PL/SQL is Oracle's procedural extension to the SQL language. PL/SQL processes tasks that are more complicated than simple queries and SQL Data manipulation language statements. PL/SQL allows a number of constructs to be grouped into a single block and executed as a unit. Among these are:
You can use PL/SQL blocks in your OCI program to
The following PL/SQL example issues a SQL statement to retrieve values from a table of employees, given a particular employee number. This example also demonstrates the use of placeholders in PL/SQL statements.
BEGIN SELECT ename, sal, comm INTO :emp_name, :salary, :commission FROM emp WHERE ename = :emp_number; END;
Keep in mind that the placeholders in this statement are not PL/SQL variables. They represent input values passed to Oracle when the statement is processed. These placeholders need to be bound to C language variables in your program.
See Also: See the PL/SQL User's Guide and Reference for information about coding PL/SQL blocks.
See the section "Binding Placeholders in PL/SQL" on page 5-5 for information about working with placeholders in PL/SQL.
The OCI processes SQL statements as text strings, which an application passes to Oracle on execution. The Oracle precompilers (Pro*C/C++, Pro*COBOL, Pro*FORTRAN) allow programmers to embed SQL statements directly into their application code. A separate precompilation step is then necessary to generate an executable application.
It is possible to mix OCI calls and embedded SQL in a precompiler program. Refer to the Pro*COBOL Precompiler Programmer's Guide for more information.
This guide uses special terms to refer to the different parts of a SQL statement. For example, a SQL statement such as
SELECT customer, address FROM customers WHERE bus_type = 'SOFTWARE' AND sales_volume = :sales
contains the following parts:
SELECT
customer
and address
customers
bus_type
and sales_volume
SOFTWARE
'
:sales
When you develop your OCI application, you call routines that specify to the Oracle8 server the address (location) of input and output variables in your program. In this guide, specifying the address of a placeholder variable for data input is called a bind operation. Specifying the address of a variable to receive select-list items is called a define operation.
For PL/SQL, both input and output specifications are called bind operations.
These terms and operations are described in detail in Chapter 4.
With Release 8.0, the Oracle server has facilities for working with object types and objects. An object type is a user-defined data structure representing an abstraction of a real-world entity. For example, the database might contain a definition of a person
object. That object might have attributes-first_name
, last_name
, and age
-which represent a person's identifying characteristics.
The object type definition serves as the basis for creating objects, which represent instances of the object type. Using the object type as a structural definition, a person
object could be created with the attributes `John', `Bonivento', and `30'.
Object types may also contain methods-programmatic functions that represent the behavior of that object type.
The Oracle8 OCI includes functions that extend the capabilities of the OCI to handle objects in an Oracle8 server. Specifically, the following capabilities have been added to the OCI:
Additional OCI calls are provided to support manipulation of objects after they have been accessed by way of SQL statements.
Note: For a more detailed description of enhancements and new features, please refer to Appendix F, "Oracle8 OCI New Features".
The OCI encompasses four main sets of functionality:
These terms are used throughout this guide.
The Oracle8 OCI provides a wide range of new features and functions. All calls available in Release 7.3 are still supported, but they are not able to take full advantage of new Oracle8 features.
Note: For a more detailed description of enhancements and new features, please refer to Appendix F, "Oracle8 OCI New Features".
Release 8.0 has the following new features and performance advantages:
Each of these features is discussed in greater detail in later chapters of this guide.
Release 8.0 of the OCI contains an entirely new set of API calls that replace those used in earlier releases. Additionally, new calls are included to provide functionality not available in earlier releases.
See Also: See the section "Obsolescent OCI Routines" on page A-2 for information about new calls that supersede existing routines.
See Chapters 13, 14, 15, and 16 for complete listings of all OCI calls.
Refer to Appendix A for lists of OCI calls that are now considered to be obsolescent or obsolete.
Oracle Corporation supports most popular third-party compilers. The details of linking an OCI program vary from system to system. See your Oracle system-specific documentation and the installation guide for more information about compiling and linking an OCI application for your specific platform.