将游标与准备好的语句相关联

PREPARE 语句让您在运行时聚集 SQL 语句的文本,并将语句文本传送到数据库服务器以供执行。如果您期望一个能返回值的动态准备好的 SELECT 、EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句可生成多行数据,在必须将该准备好的语句与一个游标相关联。(请参阅 PREPARE。)

PREPARE 语句的结果是一个语句标识符(statement idid variable),它是一个代表准备好的语句文本的数据结构,要为语句文本声明一个游标,应将该游标与语句标识符相关联。

您可以将一个顺序游标与任何准备好的 SELECT 或 EXECUTE FUNCTION (或 EXECUTE PROCEDURE)语句相关联。您不可以将一个滚动游标与准备好的 INSERT 语句或准备好包括 FOR UPDATE 子句的 SELECT 语句相关联。

在打开、使用和关闭游标之后,可以在相同的语句标识符下准备一个不同的语句。以这种方式,一个单独的游标可能在不同的时刻与不同的语句使用。再次使用游标之前,必须重新声明该游标。

下面的示例包含准备 SELECT 语句并为准备好的语句文本声明顺序游标的 GBase 8s ESQL/C 代码。首先通过返回值的 SELECT 语句准备语句标识符 st_1 ;然后为 st_1 声明游标 c_detail
EXEC SQL prepare st_1 from
        'select order_date 
        from orders where customer_num = ?';
        EXEC SQL declare c_detail cursor for st_1;
如果想要使用准备好的 SELECT 语句修改数据,可将 FOR UPDATE 子句添加到想要准备的语句文本,如下面的 GBase 8s ESQL/C 示例所示:
EXEC SQL prepare sel_1 from 
        'select * from customer for update';
        EXEC SQL declare sel_curs cursor for sel_1;

更改表结构的 DDL 操作可以使使其相关联的准备语句或相关联的例程引用修改的表的游标无效,除非准备好的对象被重新编译,或者除非例程被重新优化。有关更多信息,请参阅对游标引用的表的 DDL 操作

DECLARE 语句允许您为 GBase 8s ESQL/C 集合变量声明游标。这样的游标称为集合游标。使用集合变量可访问集合(SET 、MULTISET 、LIST)列的元素。当要访问集合变量中的一个或多个元素的时候,请使用游标。

集合派生的表这一段标识了要为其声明游标的集合变量。有关更多信息,请参阅集合派生表