add

EGL add 语句将记录放到文件、消息队列或数据库中;或者将一组记录放到数据库中。


add 语句的语法图
record name
要添加的 I/O 对象的名称:带索引记录、MQ 记录、相对记录、串行记录或 SQL 记录。
with #sql{ sqlStatement }
显式 SQL INSERT 语句。不要在 #sql 之后留下任何空格。
SQL dynamic-array name
SQL 记录动态数组的名称。元素被插入到数据库中,并且每个元素都被插入到由特定于元素的键值指定的位置。在发生第一个错误时,或者在插入了所有元素之后,操作停止。

下面是一个示例:

  if (userRequest == "A")
    try
      add record1;
    onException
      myErrorHandler(12);
    end
    end

add 语句的行为取决于记录类型。有关 SQL 处理的详细信息,请参阅 SQL 记录

带索引记录

当添加带索引记录时,记录中的键确定了该记录在文件中的逻辑位置。将记录添加至已使用的文件位置将导致硬 I/O 错误 UNIQUE 或者(如果允许重复的话)导致软 I/O 错误 DUPLICATE。

MQ 记录

当添加 MQ 记录时,记录将放置在队列的末尾。进行这种安排的原因是 add 调用了一个或多个 MQSeries® 调用:

相对记录

当添加相对记录时,键项指定文件中的记录的位置。然而,将记录添加至已使用的文件位置会导致硬 I/O 错误 UNIQUE。

记录键项必须可供任何使用该记录的函数使用,并且可以是下列任何一项:
  • 同一记录中的项
  • 记录中对于程序来说是全局的项,或者对于运行 add 语句的函数来说是局部的项
  • 对于程序来说是全局的数据项,或者对于运行 add 语句的函数来说是局部的数据项

串行记录

当添加串行记录时,记录被放置在文件末尾。

如果生成的程序添加一个串行记录,然后对同一个文件发出 get next 语句,则在执行 get next 语句之前,程序将关闭并重新打开该文件。因此,跟随在 add 语句之后的 get next 语句读取文件中的第一条记录。当 get nextadd 语句位于不同的程序中,并且其中一个程序调用另一个程序时,也会发生这种行为。

建议避免在多个程序中同时打开同一个文件。

SQL 记录

一些错误状态如下所示:
  • 指定了不是 INSERT 类型的 SQL 语句
  • 指定了 SQL INSERT 语句的一些子句但不是所有子句
  • 指定了具有下列任何特征的 SQL INSERT 语句(或接受隐式 SQL 语句):
    • 与多个 SQL 表相关
    • 只包含已被声明为只读主变量的主变量
    • 与不存在或者与相关主变量不兼容的列相关联
当在不指定显式 SQL 语句的情况下添加 SQL 记录时,结果如下所示:
  • 生成的 SQL INSERT 语句的格式类似于:
      INSERT INTO tableName
        (column01, ... columnNN)
        values (:recordItem01, ... :recordItemNN)
  • 记录中的键值确定表中的数据的逻辑位置。没有键的记录是根据 SQL 表定义和数据库的规则来处理的。
  • 作为记录部件中的记录项与 SQL 表列相关联的结果,生成的代码将每个记录项中的数据放到相关 SQL 表列中。
  • 如果已将记录项声明为是只读的,则生成的 SQL INSERT 语句不包含该记录项,并且数据库管理系统会将相关 SQL 表列的值设置为定义列时所指定的缺省值。
下面是使用 SQL 记录动态数组的示例:
  try
    add employees;
    onException
      sysLib.rollback();  end
  
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.