您可声明集合变量上的 Select 和 Insert 游标。这些游标称为 Collection 游标。您必须使用 OPEN
语句来激活这些游标。
使用 OPEN 语句的 USING 子句中的集合变量的名称。要获取更多关于以集合变量使用 OPEN …
USING 的信息,请参阅 从集合游标访存 和 插入到 Collection 游标内。
USING 子句
当游标与一个包括问号(?)占位符和准备好的语句相关联时,需要 USING 子句,如下:
在其 WHERE 子句中带有输入参数的 SELECT 语句
带有输入参数作为其用户定义的函数的参数的 EXECUTE FUNCTION(或 EXECUTE
PROCEDURE)语句
在其 VALUES 子句中带有输入参数的 INSERT 语句(在 ESQL/C 中)。
在 SPL 例程中,您必须指定这些参数作为 SPL 变量。
在 ESQL/C 中,您可以下列方式之一支持这些参数的值:
您可指定一个或多个主变量。
您可指定系统描述符区域。
您可指定指向 sqlda 结构的指针。
要获取更多信息,请参阅 PREPARE 语句。
如果您知道在运行时要提供的参数的数目和顺序及其数据类型,则可在程序中通过该语句将所需参
数定义为主变量。通过以 USING 关键字打开游标,您按位置将参数传递给数据库服务器,后跟依
其序列顺序的变量的名称。从左至右,这些变量以一一对应的方式与 SELECT 或 EXECUTE
FUNCTION(或 EXECUTE PROCEDURE)语句问号(?)占位符相匹配。
在变量的列表中,您不可包括 ESQL/C 的指示符变量。要使用指示符变量,您必须包括 SELECT
或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句文本作为 DECLARE 语句的一部
分,而不是准备好的语句的标识符。
您必须为每一占位符提供一个主变量名称。每一变量的数据类型必须与准备好的语句所需要的相应
的类型相兼容。下列 GBase 8s ESQL/C 代码片段打开 Select 游标并在 USING 子句中指定主变
量: sprintf (select_1, “%s %s %s %s %s”,“SELECT o.order_num, sum(total price)”,
“FROM orders o, items i”,
“WHERE o.order_date > ? AND o.customer_num = ?”,
“AND o.order_num = i.order_num”,
“GROUP BY o.order_num”);
EXEC SQL prepare statement_1 from :select_1;
EXEC SQL declare q_curs cursor for statement_1;
EXEC SQL open q_curs using 😮_date, 😮.customer_num;
下列示例展示在 GBase 8s ESQL/C 代码片段中,带有 EXECUTE FUNCTION 语句的 OPEN 语句
的 USING 子句:
stcopy (“EXECUTE FUNCTION one_func(?, ?)”, exfunc_stmt);
EXEC SQL prepare exfunc_id from :exfunc_stmt;
EXEC SQL declare func_curs cursor for exfunc_id;
EXEC SQL open func_curs using :arg1, :arg2;