CREATE FUNCTION 语句

使用 CREATE FUNCTION 语句创建用户定义函数,注册外部函数,编写并注册 SPL 函数。

该语句是 SQL ANSI/ISO 标准的扩展。

语法

元素 描述 限制 语法
function 在此定义的函数的名称 您必须拥有相应的语言特权,请参阅 GRANT 语句重载函数名 标识符
owner table_object 的所有者 必须拥有 table_object 所有者名称
pathname 存储编译事件警告的文件的路径名 指定的路径名必须存在于数据库所驻留的计算机之上 路径和文件名必须符合您的操作系统规则
table_object 具有可以调用 function 的触发器的表或视图的名称或同义词 在本地数据库中必须存在 标识符
提示: 如果您尝试从独立文件中的源代码文本创建函数,则使用 CREATE FUNCTION FROM 语句。

用法

GBase 8s 支持这些语言编写的用户定义的函数:
  • GBase 8s 存储过程语言(SPL)。
  • GBase 8s 支持的外部语言之一(C 或 Java™)(外部函数)。

当 IFX_EXTEND_ROLE 配置参数设置成 ON 时,只有 DBSA 授予内置 EXTEND 角色的用户才可以创建外部函数。使用 CREATE FUNCTION 语句的其它要求在 使用 CREATE FUNCTION 时必需的特权 中标识。

一个函数可以返回多少值取决于语言。用 SPL 写的函数可以返回一个或多个值。用 C 或 Java 语言写的外部函数必须只返回一个值。但是 C 函数可以返回一个集合类型,而查询的外部函数可以从 OUT 参数(对于 SPL 和 Java 语言,从 INOUT 参数), GBase 8s 可以将这些参数作为语句-局部变量(SLV)处理。

SPL 函数的 OUT 和 INOUT 参数的返回值可以作为 SLV 处理。您还可以使用 SPL 例程的局部变量或参数从拥有 OUT 或 INOUT 参数的 SPL 或 C 例程检索值。

有关该手册如何使用术语 UDR函数过程以及建议用法的信息,请分别参阅 例程、函数和过程之间的关系使用 CREATE PROCEDURE 与 CREATE FUNCTION 的对比

在 ESQL/C 中,只能在 PREPARE 语句中使用 CREATE FUNCTION 语句。如果您想要创建用户定义函数(在编译时按该函数识别文本),则必须将文本放在文件中并用 CREATE FUNCTION FROM 语句指定该文件。

如果您包含了 IF NOT EXISTS 关键字,且指定名称的函数已经在当前数据库中注册,那么数据库服务器不采取任何操作(而不是向应用程序发送异常)。(因为函数的标识符可以被重载,所以如果数据库服务器可以解析新函数的参数列表与当前数据库中任何其它同名函数的参数列表不同,则可能有必要包含这些关键字。)

函数使用在其创建时生效的排列顺序。请参阅 SET COLLATION 语句 获取关于非缺省对照的信息。

1 请参阅 例程参数列表
2 请参阅 REFERENCING 和 FOR 子句
3 请参阅 返回子句
4 请参阅 专用名
5 请参阅 例程修饰符
6 仅限存储过程语言
7 请参阅 语句块
8 仅限外部例程
9 请参阅 外部例程引用
10 请参阅 用引号括起的字符串