语法:
DECLARE CURSOR [({{,} ...)] [ HOLD]
FOR
语法元素:
::= 指定游标的名称。
= 定义可选 SELECT 参数。
::= 定义参数的变量名称。
::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT
| SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL
| REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM
| VARBINARY | BLOB | CLOB | NCLOB
定义参数的数据类型。
!!= SQL SELECT statement. 定义 SQL select 语句。请参见“SELECT”。
定义游标可保持性
:= WITH | WITHOUT 描述:
游标可以在过程签名之后和过程主体之前定义,也可以在带有 DECLARE 标记的块的开头定义。使用名称、参数列表(可选)和 SQL SELECT 语句定义游标。游标提供逐行迭代查询结果的功能。不支持更新游标。
备注在可以与 SQL 表示相同逻辑时,应避免使用游标。您应该这样做,因为游标不能以 SQL 相同的方式进行优化。
示例:
创建游标 c_cursor1 以迭代 books 表上 SELECT 的结果。游标将一个参数 v_isbn 传递给 SELECT 语句。
DECLARE CURSOR c_cursor1 (v_isbn VARCHAR(20)) FOR
SELECT isbn, title, price, crcy FROM books
WHERE isbn = :v_isbn ORDER BY isbn;
示例代码光标可保持性示例CREATE TABLE mytab (col INT);INSERT INTO mytab VALUES (10);CREATE PROCEDURE testproc AS BEGIN DECLARE i INT; DECLARE CURSOR mycur WITH HOLD FOR SELECT * FROM mytab; OPEN mycur; ROLLBACK; FETCH mycur INTO i; CLOSE mycur; SELECT :i as i FROM DUMMY;END; CALL testproc; -- Expected Result: {10}