使用动态 SQL 的 DECLARE 语句声明游标,并将它与一个向 GBase 8s ESQL/C 或 SPL 例程返回一组行的 SQL 语句相关联。
正如所指出的除外,下节描述了在 GBase 8s ESQL/C 例程中如何使用 DECLARE 语句。有关 SPL 例程中 DECLARE 语句的语法和语义更多的限制,请参阅在 SPL 例程中声明动态游标。
这些 SQL 语句中的每一个会创建一个不同类型的游标。有关更多信息,请参阅游标类型的概述。
您可以准备一个先前的 SQL 语句,并将该准备好的语句与游标相关联。有关更多信息,请参阅将游标与准备好的语句相关联。
集合变量的名称出现在 SELECT 的 FROM 子句或 INSERT 的 INTO 子句。有关更多信息,请参阅将游标与准备好的语句相关联。
DECLARE 分配一个标识符给游标,指定它的用法并指示 GBase 8s ESQL/C 预处理器为它分配存储器。在程序执行期间,DECLARE 必须在任何其它引用该游标的语句之前执行。
在单个程序中可以共同存在的游标和准备好的对象的数目由可用的内存限制。要避免超出限制,可使用 FREE 语句释放一些准备好的语句或游标。
ESQL/C 程序可以由一个或多个源代码文件组成。在缺省情况下,因为引用游标的作用域是全局到程序,所以在一个源文件中声明的游标可以被另一个文件中语句引用。在多文件程序中,如果希望将游标名称的作用域限制到声明这些游标名称的文件,则必须使用 -local 命令行选项预先处理所有文件。
EXEC SQL prepare id1 from 'select * from customer'; EXEC SQL declare x cursor for id1; EXEC SQL declare y scroll cursor for id1; EXEC SQL declare z cursor with hold for id1;
EXEC SQL declare x cursor for select * from customer; . . . stcopy("x", s); EXEC SQL declare :s cursor for select * from customer;
游标使用排列顺序,该顺序在游标被声明时是有效的,即使这不同于运行时会话的排列顺序。