用户定义的函数

用户定义的函数(UDF)是一个例程,您以 SPL 或诸如 C 或 Java™ 这样的数据库的外部语言编写该例程,且该例程将值返回到它的调用上下文。

作为表达式,UDF 有下列语法:
User-Defined Functions
元素 描述 限制 语法
function 函数的名称 函数必须存在 数据库对象名
parameter 在 CREATE FUNCTION 语句中声明了的参数的名称 对于被调用的函数中的任何参数,如果您使用 parameter = 选项,则您必须对所有参数使用它 标识符

您可在 SQL 语句内调用用户定义的函数。与内建的函数不一样,仅可由该函数的创建者和 DBA 以及已被授予了对该函数的 Execute 权限的用户可调用用户定义的函数。要获取更多信息,请参阅 例程级权限

下列示例展示某些用户定义的函数表达式。在第一个示例罗列函数参数时,省略它的 parameter 选项:
read_address('Miller')
第二个示例使用 parameter 选项来指定参数值:
read_address(lastname = 'Miller')
当您使用 parameter 选项时,parameter 名称必须与该函数注册中对应的参数的名称相匹配。例如,前面的示例假设注册了 read_address( ) 函数如下:
CREATE FUNCTION read_address(lastname CHAR(20))
          RETURNING address_t ...  ;

语句本地的变量(SLV)使得应用能够将值从用户定义的函数调用传递到同一 SQL 语句的另一部分。

随同用户定义的函数调用来使用 SLV

  1. 为用户定义的函数写一个或多个 OUT 参数(对于以 Java 或以 SPL 语言编写的 UDR,为 INOUT 参数)。

    要获取关于如何以 OUT 或 INOUT 参数编写 UDR 的信息,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南

  2. 当您注册用户定义的函数时,请在每一 OUT 参数之前指定 OUT 关键字,并在每一 INOUT 参数之前指定 INOUT 关键字。

    要获取更多信息,请参阅 为用户定义的例程指定 INOUT 参数为用户定义例程指定 OUT 参数

  3. 请在以每一 OUT 和 INOUT 参数调用用户定义的函数的函数表达式中声明 SLV。

    必须在 WHERE 内进行用户定义的函数的调用。要获取关于声明 SLV 的语法的信息,请参阅 语句本地的变量声明

  4. 请在 SQL 语句内使用该用户定义的函数已初始化了的 SLV。

    在用户定义的函数的调用已初始化了 SLV 之后,您可在其中声明了 SLV 的同一 SQL 语句的其他部分中使用此值,包括其 WHERE 子句包括该 SLV 声明的查询的子查询。要获取关于在 SELECT 语句内使用 SLV 的信息,请参阅 语句本地的变量表达式

除了使用 SLV 来从 OUT 或 INOUT 参数检索值之外,您还可使用本地变量或 SPL 例程的参数来从有 OUT 或 INOUT 参数的 SPL 或 C 例程检索值。

1 请参阅 表达式
2 请参阅 语句本地的变量声明