ALLOCATE CURSOR 语句

ALLOCATE CURSOR 语句定义了一个游标,并将其与结果集定位变量相关联。

调用 ALLOCATE CURSOR

此语句可嵌入应用程序中。 它是可动态准备的可执行语句。 它不能以交互方式发布。

授权 ALLOCATE CURSOR

不需要执行任何操作。

语法 ALLOCATE CURSOR

阅读语法图跳过可视化语法图ALLOCATE光标名称CURSOR FOR RESULT SETrs-locator-variable

描述 ALLOCATE CURSOR

光标名称
命名光标。 名称不得与源程序中已声明的游标同名。
CURSOR FOR RESULT SET rs-locator-variable
指定应用程序中根据结果集定位变量声明规则声明的结果集定位变量。

结果集定位变量必须包含一个有效的结果集定位值,该值由关联定位器或描述过程SQL语句返回。 结果集定位器变量的值在分配光标时使用。 结果集定位符的值发生后续变化时,不会影响已分配的光标。 结果集定位符的值不能与源程序中分配给另一个游标的值相同。

备注 ALLOCATE CURSOR

动态准备的ALLOCATE CURSOR语句 :必须使用带有USING子句的EXECUTE语句来执行动态准备的ALLOCATE CURSOR语句。 在动态准备的语句中,变量引用由参数标记(问号)表示。 在ALLOCATE CURSOR语句中, rs-locator-variable 始终是一个变量。 因此,对于动态准备的ALLOCATE CURSOR语句,EXECUTE语句的USING子句必须标识变量,该变量的值将替换为表示 rs-locator-variable 的参数标记。

您不能使用已在DECLARE CURSOR语句中使用的语句标识符来准备ALLOCATE CURSOR语句。 例如,以下SQL语句是无效的,因为PREPARE语句将 STMT1 用作ALLOCATE CURSOR语句的标识符,而 STMT1 已被用于DECLARE CURSOR语句。
   DECLARE CURSOR C1 FOR STMT1;
   PREPARE STMT1 FROM          INVALID
     'ALLOCATE C2 CURSOR FOR RESULT SET ?';

使用分配游标的规则: 使用分配游标时适用以下规则:

  • 您无法使用OPEN语句打开已分配的光标。
  • 您可以使用CLOSE语句关闭已分配的光标。 关闭分配的游标将关闭存储过程中定义的相关游标。
  • 每个结果集只能分配一个光标。

已分配游标的使用寿命 :回滚操作、隐式关闭或显式关闭都会破坏已分配的游标。 提交操作会破坏存储过程未定义为“保持”的已分配游标。 销毁已分配的光标将关闭存储过程中定义的相关光标。

可滚动游标的注意事项 :在ALLOCATE CURSOR语句之后,可以使用GET DIAGNOSTICS语句获取游标的属性,例如以下信息(更多信息,请参阅 GET DIAGNOSTICS语句 ):

  • DB2_SQL_ATTR_CURSOR_HOLD. 光标是否定义了“保持”属性。
  • DB2_SQL_ATTR_CURSOR_SCROLLABLE. 光标的可滚动性。
  • DB2_SQL_ATTR_CURSOR_SENSITIVITY. 光标的有效灵敏度。

    应用程序(例如 ODBC 驱动程序)可以使用敏感度信息来确定为定义为“不敏感”的光标发出哪种类型的FETCH(不敏感或敏感)。

  • DB2_SQL_ATTR_CURSOR_ROWSET. 光标是否可以用于访问行集。
  • DB2_SQL_ATTR_CURSOR_TYPE. 光标类型是仅向前、静态还是动态。
  • 光标的滚动功能在 SQLWARN1 中。
  • 光标的灵敏度在 SQLWARN4。
  • 光标的有效功能在 SQLWARN5。

示例 ALLOCATE CURSOR

以下示例中的语句假定是在PL/I程序中。

将光标 C1 与结果集定位变量 LOC1 以及存储过程返回的相关结果集:
   EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :LOC1;