内容


设计一个只保存一行的 DB2 for z/OS 表

Comments

我们为什么需要只有一行的表?

我们可能有一个应用程序流程,其中可能包括一个控制表(输入表),而作业/处理流(以 Job Control Language (JCL) 的形式存在)会访问该表,获得来自受关注用户(应用程序开发人员)的输入。我们可能需要采用某种机制:如果用户将一行数据插入到控制表中,则锁定表。在处理流(作业)被释放之前,其他用户应该无法在表中插入行。在成功完成时,作业会清空控制表中的条目。

如何实现这一概念

  • 步骤 1:假设在子系统中有一个简单的 CONTROL 表。
  • 步骤 2:使用下面的语法修改表,并添加一个名为 LOCK 的列,然后添加检查约束,名称为 FLAG:
    ALTER TABLE CONTROL_TABLE

    ADD COLUMN LOCK CHAR(3) NOT NULL ;

    ALTER TABLE CONTROL_TABLE

    ADD CONSTRAINT FLAG CHECK (LOCK IN ('YES'));

  • 步骤 3:在 LOCK 列上创建一个主索引。

设计控制表

步骤 1:假设我们有一个表,用户可以在该表中使用 SQL processor using file input (SPUFI) 或其他任何工具来输入数据。我们现在需要做的是:在表中已存在一行数据时,限制其他用户插入一个 DB2 行。接下来,我们将查看一个表,它包含的列有 PROGRAM、CREATOR、ACCESS 和 EMAIL。根据您的控制表的需要,列名可能有所不同。

图 1. 测试数据连接
该图显示控制表
该图显示控制表

步骤 2:引入另一个名称为 LOCK 的列,数据类型是 CHARACTER,长度为 3,而且是 NOT NULL,通过在 LOCK 列上建立 CHECK 约束,我们可以确保被传递给此列的数据是 YES。ALTER 命令确保不允许将其他值插入到 LOCK 列。请注意,YES 的值可以重复。如果强制插入 YES 以外的值,则会导致 SQL 错误代码 -545。

图 2. 修改后的控制表
该图显示了修改后的控制表
该图显示了修改后的控制表

步骤 3:在 LOCK 列上创建一个主索引,确保只有一个值可以保留在表中。这个值就是 YES,如下所示。

图 3. 创建一个主索引
该图显示了创建一个主索引
该图显示了创建一个主索引
图 4. 受控制的插入
该图显示受控制的插入
该图显示受控制的插入

优势

  • 根除此类场景的复杂逻辑需求
  • 可根据场景的要求和需求进行轻松修改
  • 因为表被设计为只保存一行,所以系统资源使用率较低
  • 利用 DB2 概念简单、高效的特点

结束语

DB2 for z/OS 表可用来存放大量的数据。通过在表上使用简单的概念和限制,可以让这些表在给定时间点只保存一行。引入新的控制列不会妨碍应用程序或处理流的设计逻辑。通过这种受控的 INSERT,可以明确地说明和演示产品的灵活性、可用性和可扩展性。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=1010044
ArticleTitle=设计一个只保存一行的 DB2 for z/OS 表
publish-date=07062015