概述

本文档主要介绍达梦支持的系统包功能、相关方法和举例说明等。包括 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 检测系统包是否启用

  1. 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();
  1. 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
微信扫码
分享文档
扫一扫
联系客服