| Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) Part Number E10472-05 |
|
|
View PDF |
An explicit cursor is a named pointer to a private SQL area that stores information for processing a specific SQL database manipulation language (DML) statement—usually one that returns multiple rows. You can use an explicit cursor to retrieve the rows of a result set one at a time.
You must declare and define an explicit cursor before using it. You can either declare and define it at the same time, or you can declare it first and then define it later in the same block, subprogram, or package.
An explicit cursor declaration is also called a cursor specification, or cursor spec.
Note:
An explicit cursor declared in a package specification is affected by theAUTHID clause of the package. For more information, see "CREATE PACKAGE Statement".Topics:
Syntax
cursor_declaration ::=

cursor_definition ::=

See rowtype ::=.
cursor_parameter_declaration ::=

See:
rowtype ::=

Semantics
cursor_declaration
cursor_name
The name of the explicit cursor that you are declaring now and will define later in the same block, subprogram, or package. This name can be any identifier except the reserved word SQL.
rowtype
The data type of the row that the cursor returns.
cursor_definition
Either defines an explicit cursor that was declared earlier or both declares and defines an explicit cursor.
cursor_name
Either the name of the explicit cursor that you previously declared and are now defining or the name of the explicit cursor that you are both declaring and defining.
rowtype
The data type of the row that the cursor returns. The columns of this row must match the columns of the row that select_statement returns.
select_statement
A SQL SELECT statement (not a PL/SQL SELECT INTO statement). If the cursor has formal parameters, each parameter must appear in select_statement. The select_statement can also reference other PL/SQL variables in its scope.
cursor_parameter_declaration
parameter_name
The name of the formal cursor parameter that you are declaring. This IN parameter is local to the cursor. It must appear in select_statement. In select_statement, parameter_name can appear anywhere that a constant can appear. When the cursor opens, select_statement uses the parameter value. For more information, see "Explicit Cursors that Accept Parameters".
datatype
The data type of the parameter.
Restriction on datatype This datatype cannot have constraints (that is, precision and scale for a number, or length for a string).
expression
The default value of the parameter. If you supply an actual parameter for parameter_name when you open the cursor, then expression is not evaluated. Otherwise, when the cursor declaration is elaborated, the value of expression is assigned to the parameter. The value of expression must have a data type that is compatible with datatype (see Table 3-10, "Possible Implicit PL/SQL Data Type Conversions").
rowtype
db_table_name
The name of a database table or view that is accessible when the cursor declaration is elaborated.
cursor_name
The name of another explicit cursor (not the name of the cursor that you are declaring or defining).
cursor_variable_name
The name of a cursor variable.
record_name
The name of a record.
record_type_name
The name of a type that was defined with the data type specifier RECORD.
Usage
After declaring an explicit cursor, you can open it (with the OPEN statement), fetch rows one at a time from the result set (with the FETCH statement), and then close it (with the CLOSE statement). After closing the cursor, you can neither fetch records from the result set nor see the cursor attribute values.
Cursors follow the same scoping rules as variables (see "Scope and Visibility of Identifiers").
You cannot assign a value to an explicit cursor or use it in an expression.
Examples
Example 6-44, "FOR UPDATE Cursor in CURRENT OF Clause of UPDATE Statement"
Example 6-46, "Trying to Fetch with FOR UPDATE Cursor After COMMIT Statement"
Related Topics
In this chapter:
In other chapters: