外部过程是用数据库服务器支持的外部语言写的过程。(使用 SPL 语言编写的过程不是外部过程。)
要创建 C 的用户定义的过程:
-
编写不返回值的 C 函数。
-
编译 C 函数并将编译过的代码存储在共享库中(C 的共享对象文件)。
-
在数据库服务器中使用 CREATE PROCEDURE 语句注册 C 函数。
要创建以 Java™ 语言编写的用户定义的过程:
- 写一个 Java 静态方法,它能使用 JDBC 函数与数据库服务器交互。
- 编译 Java 源并创建一个 JAR 文件(共享对象文件)。
- 用 EXECUTE PROCEDURE 语句执行 install_jar( ) 过程,在当前数据库中安装 JAR 文件。
- 如果 UDR 使用用户定义类型,则使用在 EXECUTE PROCEDURE 语句 中说明的 setUDTextName( ) 过程在 SQL 数据类型和 Java 类别之间创建映射。
- 使用 CREATE PROCEDURE 语句注册 UDR
。(如果外部例程返回一个值,则您必须使用 CREATE FUNCTION 语句而非 CREATE PROCEDURE 来注册它。)
并非将外部例程的主体直接存储在数据库中,数据库服务器仅存储包含已编译版本例程的共享对象文件的路径名。数据库服务器通过调用外部目标代码执行外部例程。
您还必须持有要注册的外部过程所在数据库的 Resource 特权或 DBA 特权,和对编写的例程所有的程序语言的 Usage 特权。(有关在 C 语言或 Java
语言上将 Usage 特权授予用户或角色或 PUBLIC 组的语法的信息,请参阅 语言级权限。)
当 IFX_EXTEND_ROLE 配置参数设置成 1 或 ON 时,只有拥有内置 EXTEND
角色的用户才可以创建外部过程。