11.7.10. open, fetch, close, select ... into statements
SELECT opt_all_distinct selection
INTO target_commalist
table_exp
with_opt_cursor_options_list
;
opt_all_distinct
: /* empty */
| ALL
| DISTINCT
;
with_opt_cursor_options_list
: /* empty */
| WITH opt_cursor_options_list
;
cursor_option
: EXCLUSIVE
;
cursor_options_commalist
: cursor_option
| cursor_options_commalist ',' cursor_option
;
opt_cursor_options_list
: /* empty */
| '(' cursor_options_commalist ')'
;
cursor_def : DECLARE NAME CURSOR FOR query_exp
| DECLARE NAME (DYNAMIC|KEYSET|STATIC) CURSOR FOR query_exp
open_statement
: OPEN cursor opt_cursor_options_list
;
fetch_statement : FETCH cursor INTO target_commalist
| FETCH cursor (FIRST|NEXT|PREVIOUS|LAST) INTO target_commalist
| FETCH cursor BOOKMARK scalar_exp INTO target_commalist
target_commalist
: variable
| target_commalist ',' variable
;
close_statement
: CLOSE cursor
;
The open, fetch and close statements manipulate cursors in Virtuoso/PL statements. Cursors are declared with the declare cursor statement. The select into statement is a shorthand for a cursor declaration, open, fetch and close.
A forward-only cursor declaration is a declaration only and executing one does not take time. The open statement effectively starts the search associated with the forward-only cursor.
The forward-only cursor options used with open and select into allow controlling how the cursor sets locks on selected rows and how many rows it fetches at a time. The EXCLUSIVE option should be used if intending to update or delete a row in the cursor's evaluation. This causes selected rows to be locked with exclusive (write) locks.
The statements:
{
DECLARE CR CURSOR FOR SELECT C_NAME FROM CUSTOMER WHERE C_ID = ID;
OPEN CR;
FETCH CR INTO NAME;
CLOSE CR;
}
and
SELECT C_NAME INTO NAME FROM CUSTOMER WHERE C_ID = ID;
have the same effect.
|
See: |
|---|---|
|
the TPC C Bench Marking chapter for more examples. |