Database 节点

用途

使用 Database 节点与指定的 ODBC 数据源中的数据库进行交互。通过对指定来自输入消息的数据的 ESQL 语句进行编码来定义交互作用的性质,并可能以某些方式(例如,执行计算)对其进行转换并将结果指派到数据库表。

您可以通过设置属性来控制,是立即落实对数据库的更新,或是待消息流处理完成时落实更新,或根据消息流的整个完成状态进行回滚操作。

尽管您可以使用此节点更新数据库,但无法对消息进行任何更新。

您可以使用此节点的专门格式:
  • 在数据库表(DataUpdate 节点)内更新值
  • 将行插入到数据库表(DataInsert 节点)内
  • 从数据库表(DataDelete 节点)删除行
  • 将消息或消息的某些部分存储到仓库(Warehouse 节点)中

Database 节点在工作台中由以下图标表示:

Database 节点图标

在消息流中使用此节点

查看以下样本,了解如何使用此节点:

考虑这样一种情况,您收到了一份需要 20 台监视器的订单。如果仓库中有足够的监视器,则要在库存数据库中降低库存级别。您可以使用 Database 节点检查您有足够可用的监视器,并降低数 据库中数量字段的值。

配置 Database 节点

当您将 Database 节点的实例放入消息流后,便可对它进行配置。右键单击编辑器视图中的节点,然后单击属性。 将显示该节点的基本属性。

对于必须为其输入值的所有必需属性(没有定义缺省值的属性),在属性对话框上都会用星号作标记。

如下所示配置 Database 节点:

  1. 数据源中指定,在执行消息流的系统上相应数据库所知的名称。代理使用 mqsicreatebrokermqsichangebrokermqsisetdbparms 命令中指定的用户标识和密码信息连接此数据库。

    在 z/OS 系统上,代理使用 mqsisetdbparms 命令中指定的代理启动任务标识或用户标识和密码、JCL 和定制数据集 <hlq>.SBIPPROC 中的 BIPSDBP。

  2. 语句中,标识包含要在此节点中执行的 ESQL 语句的 ESQL 文件内的模块。如果要模块名称包含一个或多个空格,在语句属性中用双引号将名称括起。

    当您编码与表交互的 ESQL 语句时,那些表假设已经在此数据库内 存在。如果它们不存在,则代理在运行时生成数据库错误。

    对 ESQL 语句进行编码来定制 ESQL 文件中的 Database 节点的行为,该文件与您将该 Database 节点实例包含在其中的消息流关联。ESQL 文件(缺省情况下名称为 <message_flow_name>.esql)在需要节点的消息流中包含每个节点的 ESQL。 每个与特定节点相关的代码部分都称为模块。

    如果此消息流尚不存在 ESQL 文件,则右键单击 Database 节点并单击打开 ESQL。这在 ESQL 编辑器视图中创建并打开了新的 ESQL 文件。

    如果 ESQL 文件已存在,则单击语句属性旁的浏览按钮。 这显示“模块选择”对话框,它列出可以由此消息流访问的 ESQL 文件中定义的可用 Database 节点模块(可以在其他独立的项目中定义 ESQL 文件)。选择相应的模块并单击确定。如果没有可用的合适模块,则列表为空。

    如果您指定的模块不存在,则将为您创建该模块并由编辑器定位文件来显示它。如果文件和模块已经存在,则编辑器定位文件并显示和突出显示正确模块。

    如果您愿意,可以在资源导航器中打开相应的 EAQL 文件并在大纲视图中选择此节点。

    如果在新的或现有的 ESQL 文件中为此节点创建了模块骨架,则它由以下 ESQL 组成。此示例中显示缺省模块名称:

    CREATE DATABASE MODULE <flow_name>_Database
              CREATE FUNCTION Main() RETURNS BOOLEAN
                        BEGIN
                   RETURN TRUE;
           END;
    END MODULE;

    如果创建了自己的 ESQL 模块,则正确创建该框架。您可更新缺省名称,但需确保所指定的名称与相应的节点属性语句的名称相匹配。

    添加自己的 ESQL 在 BEGIN 语句后,RETURN TRUE 前定制此节点。

    您还可以通过单击文件 > 新建 > 消息流 ESQL 文件创建 ESQL 文件。

    您可以在该模块中使用所有的 ESQL 语句,包括 SET、WHILE、DECLARE 和 IF,但不同于 Compute 节点,Database 节点将它在输入终端收到的消息未经更改地传播到输出终端。 这表示与 Filter 节点类似,您仅有一个要在 Database 节点中引用的消息。

    由于您不可以修改任何消息的任何部分,因此赋值语句(SET 语句,而非 INSERT 语句的 SET 子句)只能将值赋予临时变量。因此,可使用赋值语句的操作范围是有限的。

    如果您愿意,可以在资源导航器中打开相应的 EAQL 文件并在大纲视图中选择此节点。

  3. 从下拉菜单中选择事务设置。值为:
    • 自动(缺省值)。该消息流的一部分是 Database 节点,如果成功就落实它。即,执行在 ESQL 模块中定义的操作并且消息继续通过消息流。如果消息流失败,则回滚。如果选择自动,则在数据库上落实或回滚 Database 节点操作的功能要取决于整个消息流的成败。
    • 落实。如果不考虑整个消息流的成败,要在连接到该节点的数据库上落实在该消息流中执行的任何未落实的操作,请选择落实。即使消息流本身失败也落实对数据库进行的更改。
  4. 在属性对话框导航器中选择“基本”,并设置或清除两个复选框:
    • 如果您要将数据库警告消息作为错误来处理,并且让节点将输出消息传播到 failure 终端,则选中将警告作为错误处理复选框。该框起初未选中。

      当您选择此框时,节点将所有数据库的正返回码按错误处理并将以同样的方法生成异常,如同对负或更严重的错误那样的方式。

      如果您没有选择框,则节点将警告作为正常返回码处理,并且不生成任何异常。生成的最明显的警告是未找到,在大多数情况下可以安全地作为正常返回码处理。

    • 如果在检测到数据库错误时想要代理生成异常,选择在数据库出错时抛出异常复选框。该框起初为选中。

      如果您清除该框,则包含 ESQL 来检查任何可能在对每个数据库做出调用后(您可以使用 SQLCODE 和 SQLSTATE 来完成)返回的数据库错误。如果发生错误,您必须处理消息流中的错误来确保代理和数据库的完整性:如果您没有通过自己的处理来解决则会忽略错误,因为您已经选择不调用由代理处理的缺省错误。例如,您可以包含 ESQL THROW 语句在此节点中抛出异常,或可以使用 Throw 节点在后面的点生成自己的异常。

  5. 选择属性对话框导航器中的“描述”,以输入简短描述和/或详细描述。
  6. 单击应用在不关闭“属性”对话框的情况下对 Database 节点进行更改。单击确定以应用更改,并关闭属性对话框。

    单击取消以关闭对话框,并废弃对属性所作的所有更改。

终端和属性

下表描述 Database 节点的终端。

终端 描述
In 接受供节点处理的消息的输入终端。
Failure 如果在计算期间检测到故障,则这就是输入消息传播到的输出终端。如果您已选择将警告作为错误处理,即使处理成功完成,节点也会将消息传播到此终端。
Out 当节点中的处理完成时已转换的消息路由到的输出终端。已转换的消息也可能由 PROPAGATE 语句路由到该终端。
Out1 已转换的消息可能由 PROPAGATE 语句路由到的第一个选用输出终端。
Out2 已转换的消息可能由 PROPAGATE 语句路由到的第二个选用输出终端。
Out3 已转换的消息可能由 PROPAGATE 语句路由到的第三个选用输出终端。
Out4 已转换的消息可能由 PROPAGATE 语句路由到的第四个选用输出终端。
注: 请参阅PROPAGATE 语句以获取 PROPAGATE 语句的语法。

下表描述该节点的属性;标题为 M 的列表示属性是否是必需的(如果在未定义缺省值时必须输入值,则在属性对话框上以星号作标记),标题为 C 的列表示属性是否是可配置的(将消息流添加到 BAR 文件以部署此文件时可以更改该值)。

下表描述 Database 节点的“基本”属性。

属性 M C 缺省值 描述
数据源   数据库的 ODBC 数据源名,在该数据库中驻留着您在与该节点关联的 ESQL 中引用的表(由语句属性标识)。
语句 数据库 ESQL 文件中的模块名称,该文件包含针对数据库执行的语句。
事务 自动 节点的事务方式。这可以是自动落实
将警告作为错误处理 已清除 将数据库 SQL 警告作为错误处理。如果您选中该复选框,则执行此操作。
在数据库出错时抛出异常 选中 数据库错误导致代理抛出异常。如果您选中该复选框,则执行此操作。

下表描述 Database 节点的“描述”属性。

属性 M C 缺省值 描述
简短描述   节点的简要描述。
详细描述   描述消息流中节点用途的文本。
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac04670_