您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

定义光标

语法:

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}