IFX_REPLACE_MODULE 函数

IFX_REPLACE_MODULE 函数将使用 C 语言编写的 UDR 的加载共享对象文件替换为具有不同名称或位置的新版本。如果 IFX_EXTEND_ROLE 配置参数设置为 'On'1,则使用此功能的授权仅对数据库服务器管理员(DBSA)和 DBSA 已授予 EXTEND 角色的用户可用。
IFX_REPLACE_MODULE 函数
参数 描述 限制 语法
new_module 要替换 old_module 指定的共享对象文件的新共享对象文件的完整路径名 共享对象文件必须与指定的路径名一起存在,其长度不能超过 255 个字节 用引号括起的字符串
old_module 要用 new_module 指定共享对象文件替换的共享对象文件的完整路径名 共享对象文件必须与指定的路径名一起存在,其长度不能超过 255 个字节 用引号括起的字符串
IFX_REPLACE_MODULE 函数是 DBA 特权函数,它返回的整数值表示共享对象文件替换操作的状态: 不要使用 IFX_REPLACE_MODULE 函数重载相同名称的模块。如果发送到 IFX_REPLACE_MODULE 的旧的和新的模块的全名一样,则会发生预期外的结果。

IFX_REPLACE_MODULE 完成执行后,数据库服务器会老化 old_module 共享对象文件;即,IFX_REPLACE_MODULE 函数之后的所有语句将使用 new_module 共享对象文件中的 UDR,并且当使用它的任何语句完成是,旧模块将会被卸载。因此,在短时间内,old_modulenew_module 共享对象文件都可以驻留在内存中。如果此老化行为是不受欢迎的,请使用 IFX_UNLOAD_MODULE 函数完全卸载共享对象文件。

在 UNIX™ 上,例如,假设您希望替换 circle.so 共享库,它包含以 C 语言编写的 UDR。如果此库的旧版本驻留在 /usr/apps/opaque_types 目录,新版本在 /usr/apps/shared_libs 目录中,则使用下列 EXECUTE FUNCTION 语句执行 IFX_REPLACE_MODULE 函数:
EXECUTE FUNCTION ifx_replace_module(
        "/usr/apps/opaque_types/circle.so",
        "/usr/apps/shared_libs/circle.so", "C");  
在 Windows™ 上,例如,假设您希望替换 circle.dll 动态链接库,其包含 C UDR。如果此库的旧版本驻留在 C:\usr\apps\opaque_types 目录,新版本在 C:\usr\apps\DLLs 目录,则使用下列 EXECUTE FUNCTION 语句执行 IFX_REPLACE_MODULE 函数:
EXECUTE FUNCTION ifx_replace_module(
        "C:\usr\apps\opaque_types\circle.dll", 
        "C:\usr\apps\DLLs\circle.dll", "C");  

要在 GBase 8s ESQL/C 应用程序中执行 IFX_REPLACE_MODULE 函数,您必须将此函数与游标相关联。

有关如何使用 IFX_REPLACE_MODULE 替换共享对象文件的更多信息,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南 中如何设计 UDR 的章节。有关如何使用 IFX_UNLOAD_MODULE 函数的信息,请参阅 IFX_UNLOAD_MODULE 函数 一节。