INTO 子句
INTO 子句
元素 | 描述 | 限制 | 语法 |
data_structure | 声明为主变量的结构 | 结构的单个元素必须与返回值的数据类型兼容 | 特定于语言 |
data_var | 用于接收用户定义的函数返回值的变量 | 请参阅 数据变量。 | 特定于语言 |
indicator_var | 如果相应的 data_var 收到 NULL 值,则用于存储返回码的程序变量 | 如果相应的 data_var 可能为 NULL,则使用指示符变量 | 特定于语言 |
您必须随同 EXECUTE FUNCTION 包括 INTO 子句来指定接收用户定义的函数返回值的变量。如果该函数返回值多于一个,则这些值以您指定的顺序返回到变量列表中。
如果 EXECUTE FUNCTION 语句独立(即,它不是 DECLARE 语句的一部分且不使用 INTO 子句),则它必须执行非游标函数。 非游标函数仅返回一行值。下列示例展示 GBase 8s ESQL/C 中的 SELECT 语句:
EXEC SQL EXECUTE FUNCTION
cust_num(fname, lname, company_name) INTO :c_num;
数据变量
如果您在 GBase 8s ESQL/C 程序内发出 EXECUTE FUNCTION 语句,则 data_var 必须为主变量。在 SPL 例程内,data_var 必须为 SPL 变量。
如果您在 CREATE TRIGGER 内发出 EXECUTE FUNCTION 语句,则 data_var 必须为触发器表中或另一表中的列名。
带有指示符变量(ESQL/C)的 INTO 子句
如果存在从用户定义的函数返回的数据为 NULL 的可能性,则您应使用指示符变量。要获取更多关于指示符变量的信息,请参阅 GBase 8s ESQL/C 程序员手册。
带有游标的 INTO 子句
如果 EXECUTE FUNCTION 调用返回多行值的 UDF,则它必须执行游标函数。游标函数可返回一行或多行值,且必须与要执行的函数游标相关联。
如果 SPL 函数返回多于一行,或返回集合数据类型,则您必须以游标访问这些行或集合元素。
要返回多于一行值,必须将一个外部函数(用 C 或 Java™ 语言编写)定义为迭代函数。要获得关于迭代函数的更多信息,请参阅 GBase 8s DataBlade API 程序员指南。
在 SPL 例程中,如果 SELECT 返回多于一行,则您必须使用 FOREACH 语句来逐个地访问这些行。SELECT 语句的 INTO 子句可存储取得的值。要获取更多信息,请参阅 FOREACH。
要返回多行值,SPL 函数必须在其 RETURN 语句中包括 WITH RESUME 关键字。关于如何写 SPL 函数的更多信息,请参阅 GBase 8s SQL 教程指南。
在 GBase 8s ESQL/C 程序中,DECLARE 语句可声明函数游标,且 FETCH 语句可从游标逐个地返回行。 您可将 INTO 子句放在 EXECUTE FUNCTION 语句中或放在 FETCH 语句中,但您不可两个都放。下列 GBase 8s ESQL/C 代码示例展示您可使用 INTO 子句的不同方法:
- 使用 EXECUTE FUNCTION 语句中的 INTO 子句:
EXEC SQL declare f_curs cursor for
execute function get_orders(customer_num)
into :ord_num, :ord_date;
EXEC SQL open f_curs;
while (SQLCODE == 0)
EXEC SQL fetch f_curs;
EXEC SQL close f_curs;
使用 FETCH 语句中的 INTO 子句:
EXEC SQL declare f_curs cursor for
execute function get_orders(customer_num);
EXEC SQL open f_curs;
while (SQLCODE == 0)
EXEC SQL fetch f_curs into :ord_num, :ord_date;
EXEC SQL close f_curs;
PREPARE ... EXECUTE FUNCTION ... INTO 的备用选择
在 ESQL/C 中,您不可准备包括 INTO 子句的 EXECUTE FUNCTION 语句。然而,对于类似的功能,请遵循这些步骤:
- 准备不带有 INTO 子句的 EXECUTE FUNCTION 语句。
- 为准备好的语句声明函数游标。
- 打开游标。
- 执行带有 INTO 子句的 FETCH 语句来将返回值放到程序变量内。
作为备用选择,您可执行下列操作:
- 为未首先准备语句的 EXECUTE FUNCTION 语句声明游标,并在声明游标时在 EXECUTE FUNCTION 中包括 INTO 子句。
- 打开游标。
- 不使用 FETCH 语句的 INTO 子句,从游标访存返回的值。
SPL 函数的动态例程名称规范
动态例程名称规范简化 SPL 函数的编写,该函数调用另一个直到运行时才知道其名字的 SPL 例程。要在 EXECUTE FUNCTION 语句中指定 SPL 例程的名称,而不是罗列 SPL 例程的显示名称,则可使用 SPL 变量来保留例程名称。要了解更多关于如何动态地执行 SPL 函数的信息,请参阅 GBase 8s SQL 教程指南。