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. |