Skip Headers
Oracle® Call Interface Programmer's Guide
11g Release 2 (11.2)

Part Number E10646-06
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

Statement Functions

Table 17-2 lists the statement functions that are described in this section. Use functions that end in "2" for all new applications.

Table 17-2 Statement Functions  

Function Purpose

"OCIStmtExecute()"

Send statements to server for execution

"OCIStmtFetch()"

Fetch rows from a query. This call is deprecated.

"OCIStmtFetch2()"

Fetch rows from a query and fetches a row from the (scrollable) result set.

"OCIStmtGetPieceInfo()"

Get piece information for piecewise operations

"OCIStmtPrepare()"

Prepare a SQL or PL/SQL statement for execution

"OCIStmtPrepare2()"

Prepare a SQL or PL/SQL statement for execution. The user also has the option of using the statement cache, if it has been enabled.

"OCIStmtRelease()"

Release the statement handle

"OCIStmtSetPieceInfo()"

Set piece information for piecewise operations



OCIStmtExecute()

Purpose

Associates an application request with a server.

Syntax

sword OCIStmtExecute ( OCISvcCtx           *svchp,
                       OCIStmt             *stmtp,
                       OCIError            *errhp,
                       ub4                 iters,
                       ub4                 rowoff,
                       const OCISnapshot   *snap_in,
                       OCISnapshot         *snap_out,
                       ub4                 mode );

Parameters

svchp (IN/OUT)

Service context handle.

stmtp (IN/OUT)

A statement handle. It defines the statement and the associated data to be executed at the server. It is invalid to pass in a statement handle that has bind of data types only supported in release 8.x or later when svchp points to an Oracle7 server.

errhp (IN/OUT)

An error handle that you can pass to OCIErrorGet() for diagnostic information when there is an error.

iters (IN)

For non-SELECT statements, the number of times this statement is executed equals iters - rowoff.

For SELECT statements, if iters is nonzero, then defines must have been done for the statement handle. The execution fetches iters rows into these predefined buffers and prefetches more rows depending upon the prefetch row count. If you do not know how many rows the SELECT statement retrieves, set iters to zero.

This function returns an error if iters=0 for non-SELECT statements.

Note:

For array DML operations, set iters <= 32767 to get better performance.
rowoff (IN)

The starting index from which the data in an array bind is relevant for this multiple row execution.

snap_in (IN)

This parameter is optional. If it is supplied, it must point to a snapshot descriptor of type OCI_DTYPE_SNAP. The contents of this descriptor must be obtained from the snap_out parameter of a previous call. The descriptor is ignored if the SQL is not a SELECT statement. This facility allows multiple service contexts to Oracle Database to see the same consistent snapshot of the database's committed data. However, uncommitted data in one context is not visible to another context even using the same snapshot.

snap_out (OUT)

This parameter is optional. If it is supplied, it must point to a descriptor of type OCI_DTYPE_SNAP. This descriptor is filled in with an opaque representation that is the current Oracle Database system change number (SCN) suitable as a snap_in input to a subsequent call to OCIStmtExecute(). To avoid "snapshot too old" errors, do not use this descriptor any longer than necessary.

mode (IN)

The modes are:

The modes are not mutually exclusive; you can use them together, except for OCI_STMT_SCROLLABLE_READONLY.

Comments

This function is used to execute a prepared SQL statement. Using an execute call, the application associates a request with a server.

If a SELECT statement is executed, the description of the select list is available implicitly as a response. This description is buffered on the client side for describes, fetches, and define type conversions. Hence it is optimal to describe a select list only after an execute.

Also for SELECT statements, some results are available implicitly. Rows are received and buffered at the end of the execute. For queries with small row count, a prefetch causes memory to be released in the server if the end of fetch is reached, an optimization that may result in memory usage reduction. The set attribute call has been defined to set the number of rows to be prefetched for each result set.

For SELECT statements, at the end of the execute, the statement handle implicitly maintains a reference to the service context on which it is executed. It is the user's responsibility to maintain the integrity of the service context. The implicit reference is maintained until the statement handle is freed or the fetch is canceled or an end of fetch condition is reached.

To reexecute a DDL statement, you must prepare the statement again using OCIStmtPrepare() or OCIStmtPrepare2().

Note:

If output variables are defined for a SELECT statement before a call to OCIStmtExecute(), the number of rows specified by iters are fetched directly into the defined output buffers and additional rows equivalent to the prefetch count are prefetched. If there are no additional rows, then the fetch is complete without calling OCIStmtFetch() or OCIStmtFetch2().

Related Functions

OCIStmtPrepare()


OCIStmtFetch()

Purpose

Fetches rows from a query. This function is deprecated. Use OCIStmtFetch2().

Syntax

sword OCIStmtFetch ( OCIStmt     *stmtp,
                     OCIError    *errhp, 
                     ub4         nrows,
                     ub2         orientation,
                     ub4         mode );

Parameters

stmtp (IN)

A statement (application request) handle.

errhp (IN)

An error handle that you can pass to OCIErrorGet() for diagnostic information when there is an error.

nrows (IN)

Number of rows to be fetched from the current position.

orientation (IN)

Before release 9.0, the only acceptable value is OCI_FETCH_NEXT, which is also the default value.

mode (IN)

Pass as OCI_DEFAULT.

Comments

The fetch call is a local call, if prefetched rows suffice. However, this is transparent to the application.

If LOB columns are being read, LOB locators are fetched for subsequent LOB operations to be performed on these locators. Prefetching is turned off if LONG columns are involved.

This function can return OCI_NO_DATA on EOF and OCI_SUCCESS_WITH_INFO when one of these errors occurs:

If you call OCIStmtFetch() with the nrows parameter set to 0, this cancels the cursor.

Use OCI_ATTR_ROWS_FETCHED to find the number of rows that were successfully fetched into the user's buffers in the last fetch call.

Related Functions

OCIStmtExecute(), OCIStmtFetch2()


OCIStmtFetch2()

Purpose

Fetches a row from the (scrollable) result set. You are encouraged to use this fetch call instead of the deprecated call OCIStmtFetch().

Syntax

sword OCIStmtFetch2 ( OCIStmt     *stmthp,
                      OCIError    *errhp, 
                      ub4         nrows,
                      ub2         orientation,
                      sb4         fetchOffset,
                      ub4         mode );

Parameters

stmthp (IN/OUT)

This is the statement handle of the (scrollable) result set.

errhp (IN/OUT)

An error handle that you can pass to OCIErrorGet() for diagnostic information if an error occurs.

nrows (IN)

Number of rows to be fetched from the current position.

orientation (IN)

The acceptable values are:

fetchOffset (IN)

The offset to be used with the orientation parameter for changing the current row position.

mode (IN)

Pass in OCI_DEFAULT.

Comments

The fetch call works similarly to the deprecated OCIStmtFetch() call, but with the addition of the fetchOffset parameter. It can be used on any statement handle, whether it is scrollable or not. For a nonscrollable statement handle, the only acceptable value of orientation is OCI_FETCH_NEXT, and the fetchOffset parameter is ignored.

For new applications you are encouraged to use this call, OCIStmtFetch2().

A fetchOffset with orientation set to OCI_FETCH_RELATIVE is equivalent to all of the following:

OCI_ATTR_ROW_COUNT contains the highest absolute row value that was fetched.

All other orientation modes besides OCI_FETCH_ABSOLUTE and OCI_FETCH_RELATIVE ignore the fetchOffset value.

This call can also be used to determine the number of rows in the result set by using OCI_FETCH_LAST and then calling OCIAttrGet() on OCI_ATTR_CURRENT_POSITION. But the response time of this call can be high. If nrows is set to be greater than 1 with OCI_FETCH_LAST orientation, nrows is considered to be 1.

The return codes are the same as for OCIStmtFetch(), except that OER(1403) with return code OCI_NO_DATA is returned every time a fetch on a scrollable statement handle (or execute) is made and not all rows requested by the application could be fetched.

If you call OCIStmtFetch2() with the nrows parameter set to 0, this cancels the cursor.

The scrollable statement handle must be explicitly canceled (that is, fetch with 0 rows) or freed to release server-side resources for the scrollable cursor. A nonscrollable statement handle is implicitly canceled on receiving the OER(1403).

Use OCI_ATTR_ROWS_FETCHED to find the number of rows that were successfully fetched into the user's buffers in the last fetch call.

Related Functions

OCIStmtExecute(), OCIBindByPos()


OCIStmtGetPieceInfo()

Purpose

Returns piece information for a piecewise operation.

Syntax

sword OCIStmtGetPieceInfo( const OCIStmt  *stmtp,
                           OCIError       *errhp,
                           void           **hndlpp,
                           ub4            *typep,
                           ub1            *in_outp,
                           ub4            *iterp, 
                           ub4            *idxp,
                           ub1            *piecep );

Parameters

stmtp (IN)

The statement that when executed returned OCI_NEED_DATA.

errhp (OUT)

An error handle that you can pass to OCIErrorGet() for diagnostic information when there is an error.

hndlpp (OUT)

Returns a pointer to the bind or define handle of the bind or define whose run-time data is required or is being provided.

typep (OUT)

The type of the handle pointed to by hndlpp: OCI_HTYPE_BIND (for a bind handle) or OCI_HTYPE_DEFINE (for a define handle).

in_outp (OUT)

Returns OCI_PARAM_IN if the data is required for an IN bind value. Returns OCI_PARAM_OUT if the data is available as an OUT bind variable or a define position value.

iterp (OUT)

Returns the row number of a multiple row operation.

idxp (OUT)

The index of an array element of a PL/SQL array bind operation.

piecep (OUT)

Returns one of these defined values: OCI_ONE_PIECE, OCI_FIRST_PIECE, OCI_NEXT_PIECE, or OCI_LAST_PIECE.

Comments

When an execute or fetch call returns OCI_NEED_DATA to get or return a dynamic bind, define value, or piece, OCIStmtGetPieceInfo() returns the relevant information: bind or define handle, iteration, index number, and which piece.

See Also:

Related Functions

OCIArrayDescriptorAlloc(), OCIAttrSet(), OCIStmtExecute(), OCIStmtFetch(), OCIStmtSetPieceInfo()


OCIStmtPrepare()

Purpose

Prepares a SQL or PL/SQL statement for execution.

Syntax

sword OCIStmtPrepare ( OCIStmt       *stmtp,
                       OCIError      *errhp,
                       const OraText *stmt, 
                       ub4           stmt_len,
                       ub4           language,
                       ub4           mode );

Parameters

stmtp (IN)

A statement handle associated with the statement to be executed. By default, it contains the encoding setting in the environment handle from which it is derived. A statement can be prepared in UTF-16 encoding only in a UTF-16 environment.

errhp (IN)

An error handle that you can pass to OCIErrorGet() for diagnostic information when there is an error.

stmt (IN)

SQL or PL/SQL statement to be executed. Must be a NULL-terminated string. That is, the ending character is a number of NULL bytes, depending on the encoding. The statement must be in the encoding specified by the charset parameter of a previous call to OCIEnvNlsCreate().

Always cast the parameter to (text *). After a statement has been prepared in UTF-16, the character set for the bind and define buffers default to UTF-16.

stmt_len (IN)

Length of the statement in characters or in number of bytes, depending on the encoding. Must not be zero.

language (IN)

Specifies V7, or native syntax. Possible values are as follows:

mode (IN)

Similar to the mode in the OCIEnvCreate() call, but this one has higher priority because it can override the "naturally" inherited mode setting.

The only possible value is OCI_DEFAULT (default mode). The statement handle stmtp uses whatever is specified by its parent environment handle.

Comments

An OCI application uses this call to prepare a SQL or PL/SQL statement for execution. The OCIStmtPrepare() call defines an application request.

The mode parameter determines whether the statement content is encoded as UTF-16 or not. The statement length is in number of code points or in number of bytes, depending on the encoding.

Although the statement handle inherits the encoding setting from the parent environment handle, the mode for this call can also change the encoding setting for the statement handle itself.

Data values for this statement initialized in subsequent bind calls are stored in a bind handle that uses settings in this statement handle as the default.

This call does not create an association between this statement handle and any particular server.

Before reexecuting a DDL statement, call this function a second time.

See Also:

"Preparing Statements" for more information about using this call

Related Functions

OCIArrayDescriptorAlloc(), OCIStmtExecute(), OCIStmtPrepare2()


OCIStmtPrepare2()

Purpose

Prepares a SQL or PL/SQL statement for execution. The user has the option of using the statement cache, if it has been enabled.

Syntax

sword OCIStmtPrepare2 ( OCISvcCtx      *svchp,
                        OCIStmt        **stmthp,
                        OCIError       *errhp,
                        const OraText  *stmttext,
                        ub4            stmt_len,
                        const OraText  *key,
                        ub4            keylen,
                        ub4            language,
                        ub4            mode );

Parameters

svchp (IN)

The service context to be associated with the statement.

stmthp (OUT)

Pointer to the statement handle returned.

errhp (IN)

A pointer to the error handle for diagnostics.

stmttext (IN)

The statement text. The semantics of the stmttext are same as those of OCIStmtPrepare(); that is, the string must be NULL-terminated.

stmt_len (IN)

The statement text length.

key (IN)

For statement caching only. The key to the returned statement in the cache. This can be used for future calls to OCIStmtPrepare2(), so that there is no need to pass in the statement text and related parameters. If the key is passed in, then the statement text and other parameters are ignored, and the search is based solely on the key.

keylen (IN)

For statement caching only. The length of the key.

language (IN)

Specifies V7, or native syntax. Possible values are as follows:

mode (IN)

This function can be used with and without statement caching. This is determined at the time of connection or session pool creation. If caching is enabled for a session, then all statements in the session have caching enabled, and if caching is not enabled, then all statements are not cached.

The valid modes are as follows:

Related Functions

OCIStmtRelease()


OCIStmtRelease()

Purpose

Releases the statement handle obtained by a call to OCIStmtPrepare2().

Syntax

sword OCIStmtRelease ( OCIStmt        *stmthp,  
                       OCIError       *errhp,
                       const OraText  *key,
                       ub4            keylen,
                       ub4            mode );  

Parameters

stmthp (IN/OUT)

The statement handle returned by OCIStmtPrepare2()

errhp (IN)

The error handle used for diagnostics.

key (IN)

Only valid for statement caching. The key to be associated with the statement in the cache. This can be the key returned by OCIStmtPrepare2() or it can be a new key. If a NULL key is passed in, the statement is not tagged.

keylen (IN)

Only valid for statement caching. The length of the key.

mode (IN)

The valid modes are:

Related Functions

OCIStmtPrepare2()


OCIStmtSetPieceInfo()

Purpose

Sets piece information for a piecewise operation.

Syntax

sword OCIStmtSetPieceInfo ( void              *hndlp,
                            ub4               type,
                            OCIError          *errhp,
                            const void        *bufp,
                            ub4               *alenp, 
                            ub1               piece,
                            const void        *indp, 
                            ub2               *rcodep ); 

Parameters

hndlp (IN/OUT)

The bind or define handle.

type (IN)

Type of the handle.

errhp (OUT)

An error handle that you can pass to OCIErrorGet() for diagnostic information when there is an error.

bufp (IN/OUT)

A pointer to storage containing the data value or the piece when it is an IN bind variable; otherwise, bufp is a pointer to storage for getting a piece or a value for OUT binds and define variables. For named data types or REFs, a pointer to the object or REF is returned.

alenp (IN/OUT)

The length of the piece or the value. Do not change this parameter between executions of the same SQL statement.

piece (IN)

The piece parameter. Valid values are:

This parameter is used for IN bind variables only.

indp (IN/OUT)

Indicator. A pointer to an sb2 value or pointer to an indicator structure for named data types (SQLT_NTY) and REFs (SQLT_REF), that is, depending upon the data type, *indp is either an sb2 or a void *.

rcodep (IN/OUT)

Return code.

Comments

When an execute call returns OCI_NEED_DATA to get a dynamic IN/OUT bind value or piece, OCIStmtSetPieceInfo() sets the piece information: the buffer, the length, which piece is currently being processed, the indicator, and the return code for this column.

See Also:

Related Functions

OCIArrayDescriptorAlloc(), OCIAttrSet(), OCIStmtExecute(), OCIStmtFetch(), OCIStmtGetPieceInfo()