Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

DECLARE CURSOR 语句 [ESQL] [SP]


说明 

此语句用于声明游标。游标是处理查询结果的主要方法。

语法 1 [ESQL] 

DECLARE cursor-name
UNIQUE ]
[   NO SCROLL
  | DYNAMIC SCROLL
  | SCROLL
  | INSENSITIVE
  | SENSITIVE
]
CURSOR FOR
select-statement
statement-name
      [ FOR { UPDATE [ cursor-concurrency ] | READ ONLY } ]
call-statement }

语法 2 [SP] 

DECLARE cursor-name
[   NO SCROLL
  | DYNAMIC SCROLL
  | SCROLL
  | INSENSITIVE
  | SENSITIVE
]
CURSOR FOR
select-statement
FOR { UPDATE [ cursor-concurrency ] | READ ONLY } ]
call-statement
USING variable-name }

cursor-name :  identifier

statement-name :   identifier | hostvar

variable-name :   identifier

cursor-concurrency :
BY { VALUES | TIMESTAMP | LOCK }

参数 

UNIQUE    当游标声明为 UNIQUE 时,查询被强制返回唯一标识每行所需的所有列。这通常意味着确保返回主键或唯一性表约束中的所有列。任何需要的但是在查询中未指定的列都添加到结果集中。

UNIQUE 游标上完成的 DESCRIBE 在指示符变量中设置以下附加标志:

NO SCROLL    声明为 NO SCROLL 的游标仅限于使用 FETCH NEXT 和 FETCH RELATIVE 0 查找操作在结果集中前进。

因为一旦游标离开行,行就不能返回,所以游标没有敏感性限制。因此,当请求 NO SCROLL 游标时,Adaptive Server Anywhere 提供效率最高的游标,即敏感性未定型游标。

有关详细信息,请参见敏感性未定型游标

DYNAMIC SCROLL    DYNAMIC SCROLL 是缺省游标类型。DYNAMIC SCROLL 游标可以使用 FETCH 语句的所有形式。

当请求 DYNAMIC SCROLL 游标时,Adaptive Server Anywhere 提供敏感性未定型游标。当使用游标时,在效率和一致性之间总存在平衡问题。敏感性未定型游标以一致性为代价提供高效性能。

有关详细信息,请参见敏感性未定型游标

SCROLL    声明为 SCROLL 的游标可以使用 FETCH 语句的所有形式。当请求 SCROLL 游标时,Adaptive Server Anywhere 提供对值敏感的游标。

有关详细信息,请参见对值敏感的游标

Adaptive Server Anywhere 必须以保证结果集成员资格的方式执行对值敏感的游标。DYNAMIC SCROLL 游标的效率更高,应该使用它,除非要求 SCROLL 游标的一致行为。

INSENSITIVE    声明为 INSENSITIVE 的游标在打开时修复其成员资格;系统会使用所有原始行的副本创建一个临时表。INSENSITIVE 游标中的 FETCHING 看不到其它任何 INSERT、UPDATE 或 DELETE 语句的效果,也看不到另一个游标上的其它任何 PUT、UPDATE WHERE CURRENT、DELETE WHERE CURRENT 操作。它看不到同一游标上 PUT、UPDATE WHERE CURRENT、DELETE WHERE CURRENT 操作的效果。

有关详细信息,请参见不敏感游标

SENSITIVE    声明为 SENSITIVE 的游标对结果集的成员资格或值的更改敏感。

有关详细信息,请参见敏感游标

FOR statement-name    使用 PREPARE 语句为语句命名。只能为预准备 SELECT 或 CALL 声明游标。

FOR UPDATE | READ ONLY    声明为 FOR READ ONLY 的游标不能在 UPDATE(定位)或 DELETE(定位)操作中使用。FOR UPDATE 是缺省设置。

为响应指定 FOR UPDATE 的游标的请求,Adaptive Server Anywhere 提供对值敏感的游标或敏感性未定型的游标。不敏感的游标或者敏感性未定型游标不能更新。

USING variable-name    仅用于存储过程。此变量是包含游标 SELECT 语句的字符串。当处理 DECLARE 时,此变量必须可用,因此必须是以下之一:

用法 

DECLARE CURSOR 语句用 SELECT 语句或 CALL 语句的指定名称声明游标。

权限 

无。

副作用 

无。

另请参见 
标准和兼容性 
示例 

下面的示例阐释如何在嵌入式 SQL 中声明滚动游标:

EXEC SQL DECLARE cur_employee SCROLL CURSOR
FOR SELECT * FROM employee;

下面的示例阐释如何在嵌入式 SQL 中为预准备语句声明游标:

EXEC SQL PREPARE employee_statement
FROM 'SELECT emp_lname FROM employee';
EXEC SQL DECLARE cur_employee CURSOR
FOR employee_statement;

下面的示例阐释游标在存储过程中的使用:

BEGIN
  DECLARE cur_employee CURSOR FOR
      SELECT emp_lname
      FROM employee;
  DECLARE name CHAR(40);
  OPEN cur_employee;
  lp: LOOP
    FETCH NEXT cur_employee INTO name;
    IF SQLCODE <> 0 THEN LEAVE lp END IF;
    ...
  END LOOP;
  CLOSE cur_employee;
END

Collection Contents 上一页 下一页 PDF