delete

EGL delete 语句从文件中除去一条记录或从数据库中除去一行。

delete 语句的语法图
record name
I/O 对象的名称:与正在删除的文件记录或 SQL 行相关联的带索引记录、相对记录或 SQL 记录
from resultSetID
一个标识,它使 delete 语句与同一程序中之前运行的 getopen 语句相关。有关详细信息,请参阅 resultSetID

下面是一个示例:

  if (userRequest == "D")
    try
      get myRecord forUpdate;
      onException
        myErrorHandler(12);   // exits the program
    end

    
    try
      delete myRecord;
      onException
        myErrorHandler(16);
    end

      end

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

带索引记录或相对记录

如果要删除带索引记录或相对记录,则执行下列操作:
  • 对该记录发出 get 语句并指定 forUpdate 选项
  • 对同一个文件发出 delete 语句,并且,在发出这两个语句之间不进行任何 I/O 操作
在发出 get 语句之后,对同一文件执行的下一个 I/O 操作的作用如下所示:
  • 如果下一个 I/O 操作是对同一个 EGL 记录执行的 replace 语句,则在文件中更改该记录
  • 如果下一个 I/O 操作是对同一个 EGL 记录执行的 delete 语句,则在文件中对该记录设置删除标记
  • 如果下一个 I/O 操作是对同一文件执行的 get(带有 forUpdate 选项),则后续 replace 或 delete 对新读取的文件记录有效
  • 如果下一个 I/O 操作是对同一个 EGL 记录执行的 get(不带 forUpdate 选项)或者是对同一个文件执行的 close,则释放文件记录而不进行更改

有关 forUpdate 选项的详细信息,请参阅 get

SQL 记录

对于 SQL 处理,必须使用 EGL getopen 语句上的 forUpdate 选项来检索一行以进行后续删除:
  • 可以发出 get 语句来检索该行;或者
  • 可以发出 open 语句来选择一组行,然后调用 get next 语句来检索所关心的行。
在任何一种情况下,在生成的代码中,EGL delete 语句都是由引用游标中的当前行的 SQL DELETE 语句表示的。不能修改该 SQL 语句,该语句是按如下方式定义格式的:
  DELETE FROM tableName
    WHERE CURRENT OF cursor

如果您希望编写自己的 SQL DELETE 语句,则使用 EGL execute 语句。

不能使用单个 EGL delete 语句来从多个 SQL 表中除去行。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.