USING 子句

当游标与一个包括问号(?)占位符和准备好的语句相关联时,需要 USING 子句,如下:

在 SPL 例程中,您必须指定这些参数作为 SPL 变量。

在 ESQL/C 中,您可以下列方式之一支持这些参数的值:

要获取更多信息,请参阅 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 :o_date, :o.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;