在模块中创建对象

如果您标识了一组例程、数据类型和变量(可能在单个业务案例的支持下)以便将它们一起定义到公共名称空间中从而便于管理和部署,那么创建模块后应在模块中创建对象。

开始之前

继续此任务之前:
  • 查看 ALTER MODULE 语句文档。
  • 确保您具有执行 ALTER MODULE 语句的特权。

关于此任务

此任务通过执行 ALTER 模块语句来完成。ALTER 模块语句允许将对象作为已发布对象或未发布对象添加。可在模块外部引用已发布对象,但只有同一模块中的其他对象才能引用未发布对象。

在模块中,可在一开始没有例程体的情况下定义过程或函数。它们称为原型。只会为已发布过程或函数创建原型。以后可使用相同例程特征符来添加已发布例程原型的例程体。

限制

有关模块的限制:

过程

  1. 创建 ALTER MODULE 语句:
    • 指定 ADD 子句以将对象添加至模块,只能在模块内引用该对象。
    • 指定 PUBLISH 子句以将对象添加至模块,可在模块内部和外部引用该对象。
    1. 按照 ALTER MODULE 语句语法来提供要在模块中创建的对象的定义。
      对于例程,如果指定了 PUBLISH 子句,那么可选择仅提供例程原型。以后可将 ALTER MODULE 语句与 ADD 子句配合使用来提供例程的实现。
  2. 从受支持 接口执行 ALTER MODULE 语句。
  3. 重复步骤 1 到 2 以在数据库中创建其他对象。

结果

如果 ALTER MODULE 语句成功执行,那么会将对象定义添加至模块。

示例

以下是有关如何使用 ALTER MODULE 语句将对象添加至模块 inventory 的示例:
ALTER MODULE inventory
  PUBLISH PROCEDURE p(IN c1 INT, IN c2 INT, IN c3 CHAR) @

ALTER MODULE inventory
  PUBLISH PROCEDURE q(IN c1 INT, IN c2 VARCHAR(8))@

ALTER MODULE inventory
  ADD PROCEDURE p(IN c1 INT, IN c2 INT, IN c3 CHAR) 
           LANGUAGE SQL
           BEGIN      
              IF c1 > 10 THEN
                CALL q(1, 'hello')
              ELSE IF c2 > 5 THEN
                   SET c3 = CHAR(c2);
              END IF;      
           END@

ALTER MODULE inventory
  ADD PROCEDURE r(c1 INT, c2 INT, c3 CHAR) 
           LANGUAGE SQL
           BEGIN      
             CALL q(1, 'hello');
           END@

下一步做什么

在模块中创建对象后,可将其他模块对象添加至模块、在 SQL 语句中引用模块对象、调用模块例程或执行其他相关模块或数据库任务。