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 语句 获取关于非缺省对照
的信息。
使用 CREATE FUNCTION 时必需的特权
必需拥有数据库上的 Resource 特权或 DBA 特权,才能在该数据库中创建函数。
在创建函数之前,您还必须对要编写的函数的程序语言拥有 Usage 特权。当 GRANT
USAGE ON LANGUAGE 语授予一个用户或角色语言级别的特权时,它可以指定 SPL 、C
或 Java™ 语言 。有关更多信息,请参阅 语言级权限 。
缺省情况下,SPL 上的 Usage 特权授予 PUBLIC 。
要以 C 或 Java 外部程序语言中注册函数,除非 IFX_EXTEND_ROLE 配置参数设置成 0 或
Off ,否则您还必须持有内置 EXTEND 角色。
评论