将值指定给游标变量
可在不同时间以多种方式通过使用 SET 语句将结果集指定给游标变量。
关于此任务
- 将查询结果集指定给游标变量
- 可使用 SET 语句和 CURSOR FOR 关键字将
SELECT 查询的结果集指定给游标变量。以下是有关如何将与针对表 T 的查询相关联的结果集指定给游标变量 c1
的示例,该游标变量的行定义与该表完全相同。如果 T 定义为如下所示:
如果 C1 是定义为如下所示的强类型游标变量:CREATE TABLE T (C1 INT, C2 INT, C3 INT);CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT); CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow; DECLARE c1 simpleCur;那么可按如下所示完成赋值:
强类型检查将成功,原因是 c1 的定义与表 T 相兼容。如果 c1 是弱类型游标,那么此赋值也将成功,原因是不会执行任何数据类型检查。SET c1 = CURSOR FOR SELECT * FROM T; - 将字面值指定给游标变量
- 可使用 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'); - 将游标变量值指定给游标变量值
- 仅当游标变量具有完全相同的结果集定义时,才能将一个游标变量值指定给另一个游标变量值。例如:如果 c1 和 c2 是定义为如下所示的强类型游标变量:
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;一旦对游标变量指定了值,那么可指定和引用游标变量和游标变量字段值。