本文档主要介绍达梦支持的系统包功能、相关方法和举例说明等。包括 DMGEO、DBMS_ALERT、DBMS_OUTPUT、UTL_FILE 和 UTL_MAIL 等系统包。
1 概述
1.1 系统包创建、删除语句
DM 在新建库第一次启动服务器时会自动创建所有系统包。
用户也可以通过调用系统过程来创建、删除指定系统包:一是创建、删除指定的系统包;二是创建、删除所有系统包。
注意SP_INIT_XXX_SYS(),SP_CREATE_SYSTEM_PACKAGES()使用限制
1.不能在MPP全局模式下的存储过程中直接调用,在MPP LOCAL模式下可在存储过程中直接调用;
2.不能在存储过程中带参数进行动态调用
1.2 创建、删除指定的包
SP_CREATE_SYSTEM_PACKAGES 用来创建或删除指定的系统包。:一是 SP_INI_XXX_SYS(create_flag);二是 SP_CREATE_SYSTEM_PACKAGES(create_flag, pkgname)。
1.2.1 使用 SP_INIT_XXX_SYS()语句
使用 SP_INI_XXX_SYS 过程创建或删除指定的系统包。该方法仅支持 DMGEO,DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 包。
这些系统包和创建语句对应关系如下:
包名 | **创建语句****SP_INIT_XXX_SYS() |
---|---|
DMGEO | SP_INIT_GEO_SYS(create_flag); |
DBMS_JOB | SP_INIT_JOB_SYS(create_flag); |
DBMS_WORKLOAD_REPOSITORY | SP_INIT_AWR_SYS(create_flag); |
DBMS_SCHEDULER | SP_INIT_DBMS_SCHEDULER_SYS(create_flag); |
SP_INIT_XXX_SYS()详细介绍如下:
语法如下:
SP_INIT_GEO_SYS(CREATE_FLAG INT)
SP_INIT_JOB_SYS(CREATE_FLAG INT);
SP_INIT_AWR_SYS(CREATE_FLAG INT);
SP_INIT_DBMS_SCHEDULER_SYS(CREATE_FLAG INT);
参数详解
- CREATE_FLAG
为 1 时表示创建对应的系统包;为 0 表示删除对应的系统包。
返回值
无。
举例说明
例 创建 DBMS_JOB 包。
SP_INIT_JOB_SYS(1);
1.2.2 使用 SP_CREATE_SYSTEM_PACKAGES()语句
SP_CREATE_SYSTEM_PACKAGES 用来创建或删除指定的系统包。除了使用 SP_INIT_XXX_SYS 建、删除的系统包之外,均可使用 SP_CREATE_SYSTEM_PACKAGES 创建或删除。
SP_CREATE_SYSTEM_PACKAGES()的详细介绍如下:
语法如下:
SP_CREATE_SYSTEM_PACKAGES (
CREATE_FLAG INT,
PKGNAME VARCHAR(128)
)
参数详解
- CREATE_FLAG
为 1 时表示创建指定的系统包;为 0 表示删除指定的系统包。
- PKGNAME
指定要创建的包名。
返回值
无。
举例说明
例 创建 DBMS_LOB 系统包。
SP_CREATE_SYSTEM_PACKAGES(1, 'DBMS_LOB');
1.3 创建、删除所有系统包
SP_CREATE_SYSTEM_PACKAGES 用来创建或删除所有系统包,其中不包含 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 包。若在创建过程中某个系统包由于特定原因未能创建成功,会跳过继续创建后续的系统包。
语法如下:
SP_CREATE_SYSTEM_PACKAGES (
CREATE_FLAG INT
)
参数详解
- CREATE_FLAG
为 1 时表示创建所有系统包;为 0 表示删除这些系统包。
返回值
无。
举例说明
例 创建所有系统包。
SP_CREATE_SYSTEM_PACKAGES (1);
1.4 检测系统包是否启用
- SF_CHECK_SYSTEM_PACKAGES
SF_CHECK_SYSTEM_PACKAGES 用来检测系统包的启用状态。系统包的启用状态由是否执行过 SP_CREATE_SYSTEM_PACKAGES(1)过程决定,若执行过,则状态为已启用。
语法如下:
INT
SF_CHECK_SYSTEM_PACKAGES()
返回值
0:未启用;1:已启用
举例说明
获得系统包的启用状态。
SELECT SF_CHECK_SYSTEM_PACKAGES();
- SF_CHECK_SYSTEM_PACKAGE
SF_CHECK_SYSTEM_PACKAGE 可用来检查某个特定的系统包是否启用。
语法如下:
INT
SF_CHECK_SYSTEM_PACKAGE(
PACKAGE_NAME VARCHAR
)
返回值
0:未启用;1:已启用
举例说明
例 获得系统包 DBMS_SCHEDULER 的启用状态。
SELECT SF_CHECK_SYSTEM_PACKAGE('DBMS_SCHEDULER');
1.5 包间依赖关系
部分系统包之间有依赖关系,被依赖包一旦被删除,依赖包就会失效。在 DPC 环境下创建系统包时,若未创建系统包所依赖的包就直接创建系统包,建包语句在 MP 节点执行后,将在该节点打印警告信息,不会向 SP 节点返回警告信息,此时,SP 节点虽然收到了最终执行语句成功的消息,但实际上该系统包没有创建成功。
针对以下存在依赖关系的系统包,当用户创建这些系统包时,系统会自动创建它们所依赖的包:
- DBMS_ALERT 依赖 DBMS_LOCK 和 DBMS_UTILITY
- DBMS_METADATA 依赖 DBMS_LOB 和 UTL_RAW
- DBMS_LOB 依赖 UTL_RAW
针对以下存在依赖关系的系统包,用户需要先手动创建它们所依赖的包,然后才能成功创建这些系统包:
- DBMS_PIPE 依赖 DBMS_XMLGEN
- DBMS_XMLGEN 依赖 DBMS_LOB
- UTL_I18N 依赖 UTL_RAW
- DBMS_AQ 依赖 DBMS_AQADM 和 DBMS_RANDOM
- DBMS_DDL 依赖 DBMS_SQL