南大通用GBase8s 常用SQL语句(133)

本文详细介绍了在GBase8s ESQL/C中,如何使用INTO子句来接收用户定义的函数返回值。内容涵盖INTO子句的元素、描述、限制及语法,强调了数据变量、指示符变量的使用,并讨论了与游标配合处理多行返回值的方法。此外,还提到了动态例程名称规范,允许在运行时指定SPL函数的名称。
摘要由CSDN通过智能技术生成

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 子句的不同方法:

  1. 使用 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 语句。然而,对于类似的功能,请遵循这些步骤:

  1. 准备不带有 INTO 子句的 EXECUTE FUNCTION 语句。
  2. 为准备好的语句声明函数游标。
  3. 打开游标。
  4. 执行带有 INTO 子句的 FETCH 语句来将返回值放到程序变量内。

作为备用选择,您可执行下列操作:

  1. 为未首先准备语句的 EXECUTE FUNCTION 语句声明游标,并在声明游标时在 EXECUTE FUNCTION 中包括 INTO 子句。
  2. 打开游标。
  3. 不使用 FETCH 语句的 INTO 子句,从游标访存返回的值。

SPL 函数的动态例程名称规范

动态例程名称规范简化 SPL 函数的编写,该函数调用另一个直到运行时才知道其名字的 SPL 例程。要在 EXECUTE FUNCTION 语句中指定 SPL 例程的名称,而不是罗列 SPL 例程的显示名称,则可使用 SPL 变量来保留例程名称。要了解更多关于如何动态地执行 SPL 函数的信息,请参阅 GBase 8s SQL 教程指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值