将值指定给游标变量

可在不同时间以多种方式通过使用 SET 语句将结果集指定给游标变量。

关于此任务

将查询结果集指定给游标变量
可使用 SET 语句和 CURSOR FOR 关键字将 SELECT 查询的结果集指定给游标变量。以下是有关如何将与针对表 T 的查询相关联的结果集指定给游标变量 c1 的示例,该游标变量的行定义与该表完全相同。
如果 T 定义为如下所示:
CREATE TABLE T  (C1 INT, C2 INT, C3 INT);
如果 C1 是定义为如下所示的强类型游标变量:
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);         
CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow;
DECLARE c1 simpleCur;
那么可按如下所示完成赋值:
SET c1 = CURSOR FOR SELECT * FROM T; 
强类型检查将成功,原因是 c1 的定义与表 T 相兼容。如果 c1 是弱类型游标,那么此赋值也将成功,原因是不会执行任何数据类型检查。
将字面值指定给游标变量
可使用 SET 语句和 CURSOR FOR 关键字将 SELECT 查询的结果集指定给游标变量。以下是有关如何将与针对表 T 的查询相关联的结果集指定给游标变量 c1 的示例,该游标变量的行定义与该表完全相同。
使 T 成为定义为如下所示的表:
CREATE TABLE T  (C1 INT, C2 INT, C3 INT);  
使 simpleRow 成为行类型,并使 simpleCur 成为游标类型,它们分别按如下所示创建:
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);         
CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow;
使 c1 成为按如下所示在过程中声明的强类型游标变量:
DECLARE c1 simpleCur;  
可按如下所示将字面值指定给游标 c1
SET c1 = CURSOR FOR VALUES (1, 2, 3);
强类型检查将成功,原因是字面值与游标定义相兼容。以下是将失败的字面值赋值的示例,失败原因是字面值数据类型与游标类型定义不兼容:
SET c1 = CURSOR FOR VALUES ('a', 'b', 'c'); 
将游标变量值指定给游标变量值
仅当游标变量具有完全相同的结果集定义时,才能将一个游标变量值指定给另一个游标变量值。例如:
如果 c1c2 是定义为如下所示的强类型游标变量:
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);

CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow

DECLARE c1 simpleCur;

DECLARE c2 simpleCur;
如果 c2 已定义为如下所示的值:

SET c2 = CURSOR FOR VALUES (1, 2, 3);
可按如下所示将 c2 的结果集指定给游标变量 c1

 SET c1 = c2;

一旦对游标变量指定了值,那么可指定和引用游标变量和游标变量字段值。