CREATE MODULE 语句

CREATE MODULE 语句在应用程序服务器上创建模块。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

授权

语句授权标识所拥有的特权必须至少包括下列其中一项权限:
  • 数据库上的 IMPLICIT_SCHEMA 权限 (如果模块的隐式或显式模式名不存在)。
  • CREATEIN 对模式的特权 (如果模块的模式名称引用现有模式)。
  • 对模式的 SCHEMAADM 权限 (如果模块的模式名称引用现有模式)。
  • DBADM 权限
要替换现有模块,语句的授权标识必须是现有模块的所有者 (SQLSTATE 42501)。

语法

Read syntax diagramSkip visual syntax diagramCREATEOR REPLACE MODULEmodule-name

描述

或替换
指定替换模块的定义 (如果当前服务器上存在)。 在目录中替换新定义之前,将有效删除现有模块定义 (包括模块中的所有对象) ,但对模块授予的特权不受影响。 如果当前服务器上不存在模块的定义,那么将忽略此选项。 此选项只能由对象所有者指定。
模块名称
命名模块。 名称 (包括隐式或显式限定符) 不能标识当前服务器上的现有模块。 模块名称和模式名称不得以字符 "SYS" 开头 (SQLSTATE 42939) ,建议不要使用 SESSION。

注意

  • 模块旨在作为其他数据库对象的集合。 创建模块后,将使用 ALTER MODULE 语句来管理模块中的对象。 模块可以包含函数,过程,类型,全局变量和条件。 可以发布模块中的对象以使其可供从模块外部引用。 如果未发布对象,那么只能从模块中引用该对象。 可以认为模块由 2 部分组成:
    • 模块规范由所有已发布的对象 (不包括任何例程的主体) 组成。
    • 由所有未发布的对象以及任何已发布例程的主体组成的模块主体。
    模块管理操作包括
    • ADD ,用于向模块添加对象而不发布该对象,或者将例程原型替换为已实现的例程定义。
    • PUBLISH 用于向模块添加对象并将其发布。
    • 对模块中的对象的 COMMENT。
    • DROP 用于删除模块中的对象或删除模块主体。
    至少一个已发布的对象应该存在于一个模块中,以便有某种方法来引用该模块。

示例

创建名为 salesModule 的模块
   CREATE MODULE salesModule