SYSBldPrepare( ) 是 GBase 8s 在服务器实例的所有数据库中定义的函数签名。可以使用它注册或注销 DataBlade 模块,另一种方法是使用 BladeManager 实用程序。
CREATE FUNCTION gbasedbt.sysbldprepare (CHAR(64), CHAR(18)) RETURNS INTEGER EXTERNAL NAME '$GBASEDBTDIR/extend/ifxmngr/ifxmngr.bld(SYSBldCustomPrepare)' LANGUAGE C;
返回的整数表示此函数调用成功(0)或失败(非0)。
这是调用 SYSBldPrepare( ) 的语法:
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
module | 要注册或注销的 DataBlade 模块的名称 | 要 'CREATE' module 必须安装在 $GBASEDBTDIR/extend 中。要 'DROP' 它则必须在当前数据库中注册。 | 字符串字符 |
file | 列出一个或多个 DataBlade 模块的文件的名称,每个模块引用格式 | 必须在 $GBASEDBTDIR/extend/ifxmngr 目录中存在 | Character string with no suffix |
major | 整数指定主要的 GBase 8s 发布版本 | 必须与已安装或已注册的 DataBlade 模块或通配符的主要版本匹配 | 数字字符 |
minor | 整数指定 GBase 8s 次要的发布版本 | 必须与已安装或已注册的 DataBlade 模块或通配符的次要版本匹配 | 数字字符 |
os_code | 支持的操作系统的大写字母代码 | 有效选项为 F 、H 、T 或 U。这些代码在 DataBlade 模块安装与注册指南的第一章中有所描述。 | 文字字符 |
interim | 整数指定 GBase 8s 临时的发布版本 | 必须与已安装或已注册的 DataBlade 模块或通配符的临时版本匹配 | 数字字符 |
可以使用 SQL 的 EXECUTE FUNCTION 语句或 SPL 的 CALL 语句调用此函数。
SYSBldPrepare( ) 的第一个参数指定要处理的 DataBlade 模块或文件。第二个参数是注册 ('CREATE')还是 注销('DROP')第一个参数必须指定一个 DataBlade 模块,而不是一个文件。
如果 'CREATE' 是第二个参数,则第一个参数必须是单个模块引用或文本文件的名称,它指定一个或多个模块引用的列表,每个模块引用语法的格式如上面的语法图所示。(但是,此文本文件不能列出列出模块引用的另一个文本文件的名称。)。通过将有效文件指定为第一个参数,可以在单次调用 SYSBldPrepare( ) 函数注册一组 DataBlade模块。
该文件可以是您创建的文件,也可以是数据库服务器创建的 builtin 文件。builtin 文件包括 GBase 8s 分类为内置的 DataBlade 模块的列表。这些内置 DataBlade 您可与 GBase 8s 一起分布,并安装在 $GBASEDBTDIR/extend 文件系统中,但在它们注册到数据库之前无法访问。不支持用户对数据库服务器维护的此 builtin 文件的更新。
当第一个参数以 DataBlade 模块的名称开头时,您还可以执行句号( .)分隔符之后的结束版本字符串。 完整的版本字符串与 SQL 的 DBINFO('version full') 函数或 oninit -V 实用程序的返回值的格式相同, 但是它基于 DataBlade 模块的发布版本。
模块引用中不是最后一个字符的任何星号符号都将解释为文字字符,而不是通配符。
EXECUTE FUNCTION sysbldprepare ('example.8.21.FC2', 'create');
但是,如果已经在数据库中注册了相同的 DataBlade 模块的不同发行版本,则如果 'CREATE' 是第二个参数,则mSYSBldPrepare( ) 会升级。例如,上面的函数调用把 Example DataBlade 模块的版本 8.20.FC1 升级到版本 8.21.FC2,如果版本 8.20.FC1 在调用 SYSBldPrepare( ) 时已经在同一个数据库中注册,但是 R-tree DataBlade 模块不会被隐式升级。
EXECUTE FUNCTION sysbldprepare ('Node.*', 'drop');
与注册操作不同,调用指定 'DROP' 作为第二个参数的 SYSBldPrepare( ) 不会对第一个参数未指定的任何 DataBlade 模块自动生效。'DROP' 参数不会隐式注销与第一个参数指定的模块具有依赖关系的其它 DataBlade 模块。
SYSBldPrepare( ) 函数在内部使用显式事务。如果发出 BEGIN WORK 以及开始调用 SYSBldPrepare( ) 的事务,则在同一事务中,但在调用 SYSBldPrepare( ) 之前,DML 或 DDL 语句对数据库所做的任何更改的状态是不可预测的。当提交 SYSBldPrepare( ) 的内部事务时,可能会提交来自 DML 或 DDL 操作的更改,从而使您无法通过 SQL 语句的词法顺序中函数调用之后的错误处理逻辑回滚这些更改。要避免此情况,请不要在显式开始的事务中调用 SYSBldPrepare( ) 。
如果尝试使用 'DROP' 选项注销在当前数据库中注册的另一个 DataBlade 模块所依赖的另一个 DataBlade 模块,则 SYSBldPrepare( ) 函数会发出错误。例如,当在注册 Example DataBlade 模块时您不能使用此函数注销 R-tree DataBlade 模块mod。
如果 SYSBldPrepare( ) 试图注销未注册在数据库中的 DataBlade 模块, GBase 8s 也会发出错误。
以下示例显示尝试注册未安装的 DataBlade 模块以及生成的错误消息:EXECUTE FUNCTION sysbldprepare ('node.2.33', 'create'); (U0001) - registerBlade - Unable to register node.2.33 – DataBlade module not found - check online log and sysblderrorlog table for more information
如果 IFX_EXTEND_ROLE 配置参数设置为 ON,那么调用此例程的授权仅对数据库服务器管理员(DBSA)和 DBSA 授予的 EXTEND 角色的其它人可用。缺省情况下,DBSA 是用户 gbasedbt。
此函数执行时发生的异常可能导致 SYSBldPrepare( ) 发出不是 GBase 8s 错误消息的诊断错误消息。有关 SYSBldPrepare( ) 可用发出的错误消息的信息,请参阅 GBase 8s DataBlade 模块安装和注册指南 。