DELETE

从文件(仅限 VSAM KSDS、VSAM RRDS 和数据表)删除记录。

语法

DELETE

读取语法图跳过可视语法图DELETEFILE( filename)TOKEN( data-area)RIDFLD( data-area)KEYLENGTH( data-value)GENERICNUMREC( data-area) SYSID( 系统名称) NOSUSPEND RBARRN

条件: CHANGED , DISABLED , DUPKEY , FILENOTFOUND , ILLOGIC , INVREQ , IOERR , ISCINVREQ , LOADING , LOCKED , NOTAUTH , NOTFND , NOTOPEN , RECORDBUSY 和 SYSIDERR

NOHANDLERESPRESP2是常用选项,可添加到所有 EXEC CICS 命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS 命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.

如果此命令所引用的文件是:
  • 定义为远程,该命令是通过 IPIC 连接提供到远程 CICS® 区域的功能。
  • 定义为本地 VSAM 文件, VSAM RLS 文件或耦合设施数据表。
如果此命令所引用的文件是:
  • 定义为远程,并且该命令是通过非 IPIC 连接提供的功能。
  • 定义为 NSR。
  • 定义为共享数据表或 BDAM 文件。

描述

DELETE 命令从 KSDS 上的文件, KSDS 上的路径, CICS 或用户维护的数据表或 RRDS 上的记录中删除记录。 不能从 VSAM ESDS 或 BDAM 文件中删除。 对 KSDS 的所有引用同样适用于 CICS 维护的数据表,除非另有声明,否则适用于 KSDS 上的路径。 该文件可以在本地或远程系统上。 您可以在 RIDFLD 选项中识别要删除的特定记录。

您可以使用此命令的一次调用来删除一组记录,并通过 GENERIC 选项来标识该组 (不可用于 RRDS)。 应谨慎使用带有 GENERIC 选项的 DELETE 命令。 如果指定的通用密钥将与大量记录匹配,那么 CICS 工作单元将持有大量记录锁定,直到同步点为止。 这可能会导致 CICS 区域中的存储问题,或者如果该文件是 RLS 文件,那么可能会导致过度使用耦合设施资源并影响其他系统。 请改为考虑使用一系列通用删除 (通过使用将与较少记录匹配的通用键) 和在删除每个记录范围之后的同步点。

您还可以使用此命令来删除先前检索以进行更新的单个记录 (由 READ UPDATE 命令)。 在这种情况下,不得指定 RIDFLD 选项。

注: 如果要转换为 RLS 访问方式并在 CICS中使用系统初始化参数 CILOCK=NO ,请参阅 VSAM RLS 以获取迁移注意事项和建议。

当使用此命令从 CICS维护的数据表中删除记录时,将对源 VSAM KSDS 数据集和内存中数据表进行更新。

当此命令用于从用户维护的数据表中删除记录时,将仅对内存中的数据表进行更新。

使用此命令从耦合设施数据表中删除记录时,将仅对耦合设施中的数据表进行更新。

选项

FILE (filename)
指定要访问的文件的名称。

如果指定了 SYSID ,那么假定此文件所引用的数据集位于远程系统上,而不考虑是否对 CICS定义了该名称。 否则,将使用资源定义来确定数据集是在本地系统上还是在远程系统上。

GENERIC (仅限 VSAM KSDS)
指定搜索键是具有 KEYLENGTH 选项中指定的长度的通用键。 当找到具有与指定的开始字符 (通用键) 相同的键的记录时,将满足对该记录的搜索。
KEYLENGTH (data-value)
指定 RIDFLD 选项中指定的键的长度 (半字二进制) ,但当指定 RBA 或 RRN 时除外,在这种情况下它无效。 如果指定了 GENERIC ,那么必须指定此选项,并且每当指定密钥时都可以指定此选项。 但是,如果指定的长度与为数据集定义的长度不同,并且操作不是通用的,那么会发生 INVREQ 条件。

如果指定 GENERIC ,并且 KEYLENGTH 不小于 VSAM 定义中指定的长度,那么也会出现 INVREQ 条件。

请勿为 KEYLENGTH 指定零值,因为结果不可预测。

对于远程文件,可以在 FILE 定义中指定 KEYLENGTH。 如果未在其中定义 KEYLENGTH ,并且未在应用程序中指定 KEYLENGTH ,并且键的长度超过 4 个字符,那么缺省值为 4。

NOSUSPEND (仅限 RLS)
指定如果 VSAM 对记录挂起活动锁定 (包括由于死锁而锁定的记录) ,那么请求不会等待。
注: 在 CICS 返回 RECORDBUSY 响应之前,指定 NOSUSPEND 等待至少 1 秒的请求。
NUMREC (data-area) (仅限 VSAM KSDS)
指定 CICS 设置为已删除记录数的半字二进制数据区。
RBA
(仅限 VSAM KSDS 基本数据集,而不是路径) 指定 RIDFLD 选项中指定的记录标识字段包含相对字节地址。 仅当使用相对字节地址而不是用于标识记录的键来删除记录时,才使用此选项。
不能将 RBA 用于:
  • 用户维护的数据表
  • 耦合设施数据表
  • 以 RLS 访问方式打开的任何文件
  • 可保存超过 4 GB 数据的 KSDS 文件
RIDFLD (数据区)
指定记录标识字段。 内容可以是键,相对字节地址 (RBA) 或相对记录号。 对于相对字节地址或相对记录号,此字段的格式必须是全字二进制。 对于相对字节地址, RIDFLD 可以大于或等于零。 对于相对记录号, RIDFLD 可以大于或等于 1。

内容必须是用户维护的数据表或耦合设施数据表的键。

如果还指定了 GENERIC ,那么必须指定此选项。

RRN (仅VSAM RRDS)
指定在 RIDFLD 选项中指定的记录标识字段包含相对记录号。 仅将此选项用于引用相对记录数据集的文件。
SYSID (systemname)
指定请求所指向的系统的名称 (1-4 个字符)。

如果指定 SYSID 并同时省略 RBA 和 RRN ,那么还必须指定 KEYLENGTH; 在资源定义中找不到 KEYLENGTH。

TOKEN (数据区)
指定此 DELETE 请求的唯一标识作为全字二进制值。 使用此标识将删除请求与先前 READ UPDATE 或 BROWSE for UPDATE 请求上返回的记录相关联。 要使用的值是先前 READ UPDATE 或 BROWSE FOR UPDATE 请求所持有的 TOKEN 中返回的值。

可以交付 TOKEN 函数。 但是,如果指定 TOKEN 的请求是传递给不识别此选项的产品的 CICS Family 成员的函数,那么该请求将失败。

条件

105 已更改
RESP2 值:
109
将对使用争用更新模型定义为耦合设施数据表的文件发出 DELETE 命令 (不含 RIDFLD) ,并且自应用程序读取该记录以进行更新以来已更改该记录。 要成功执行 DELETE ,请重复读取以进行更新以获取最新版本的记录,然后重试 DELETE 命令。

缺省操作: 异常终止任务。

84 已禁用
RESP2 值:
50
已禁用文件。 可以禁用文件,因为:
  • 最初定义为已禁用,但此后未启用。
  • 它已被 SET FILECEMT SET FILE 命令禁用。

DELETE 命令遵循带有 UPDATE 选项的任何读操作时,不能发生此情况。

缺省操作: 异常终止任务。

15 个 DUPKEY
RESP2 值:
140
通过具有 NONUNIQUEKEY 属性的备用索引来访问记录,下面是具有相同键的另一个备用索引记录。

缺省操作: 异常终止任务。

12 个 FILENOTFOUND
RESP2 值:
1
在文件资源定义中找不到 FILE 选项中引用的文件名。

缺省操作: 异常终止任务。

21 ILLOGIC
RESP2 值:
110
发生不在其他某个 CICS 响应类别中的 VSAM 错误。

请参阅 EXEC 接口块中的 EIBRCODE; 有关详细信息,请参阅 EIB 字段

缺省操作: 异常终止任务。

16 INVREQ
RESP2 值:
20
根据资源定义,不允许执行删除操作。
21
对引用 VSAM ESDS 的文件发出 DELETE 命令。
22
将对不是 VSAM KSDS 的文件发出通用删除。
25
指定了 KEYLENGTH 和 GENERIC 选项,并且在 KEYLENGTH 选项中指定的长度大于或等于完整键的长度。
26 日
指定了 KEYLENGTH 选项 (但未指定 GENERIC 选项) ,并且指定的长度不等于为此文件引用的数据集定义的长度。
27
针对引用 BDAM 数据集的文件发出 DELETE 命令。
31 日
对于未发出先前 READ UPDATE 命令的文件,将发出不带 RIDFLD 选项的 DELETE 命令。
42
指定了 KEYLENGTH 和 GENERIC 选项,并且在 KEYLENGTH 选项中指定的长度小于零。
44
DELETE 命令不符合用户维护或耦合设施数据表的正确格式; 例如,如果指定了 RBA。
47
DELETE 指令包含其值不能与用于 UPDATE 请求的现有读操作的任何令牌相匹配的令牌。
51
针对以 RLS 方式访问的 KSDS 文件发出指定 RBA 或 XRBA 关键字的 DELETE 命令。 RLS 不支持对 KSDS 文件的相对字节地址 (RBA) 访问。
55
为非 RLS 文件指定了 NOSUSPEND。
56
尝试更新可恢复耦合设施数据表失败,因为当前工作单元已更新 1024 个可恢复耦合设施数据表。 不能在工作单元中更新超过 1024 个可恢复耦合设施数据表
57
不允许 DELETE 操作,因为关联的 VSAM 数据集的 AVAILABILITY 状态为 RREPL ,这将不允许此类操作 (来自复制程序的操作除外)。
59
指定了 XRBA ,但数据集不是扩展 ESDS。

缺省操作: 异常终止任务。

17 IOERR
RESP2 值:
120
文件控制操作期间发生 I/O 错误。 I/O 错误是 CICS 条件未涵盖的任何异常事件。

对于 VSAM 文件, IOERR 通常指示硬件错误。 EXEC 接口块中提供了更多信息; 有关详细信息,请参阅 EIB 字段

对于耦合设施数据表, IOERR 指示从耦合设施访问返回的响应不正确。

缺省操作: 异常终止任务。

54 ISCINVREQ
RESP2 值:
70
远程系统指示不符合已知条件的故障。

缺省操作: 异常终止任务。

94 个 LOADING
RESP2 值:
104
将对当前正在装入的用户维护的数据表发出删除请求。 在装入期间无法修改用户维护的数据表。

如果删除请求是针对尚未装入的密钥,那么还会针对耦合设施数据表返回 LOADING。 可以在装入期间修改耦合设施数据表,但仅当请求的键在已装入的那些记录的范围内时。

对于在装入期间发生故障的耦合设施数据表,也可以返回 LOADING 响应。 有关在耦合设施数据表的装入失败时发生的情况的更多信息,请参阅 数据表管理出口 XDTRD , XDTAD 和 XDTLC中对 XDTLC 全局用户出口的描述。

如果应用程序持续或过于频繁地迂到 LOADING 条件,请检查此条件是否不是由引用同一数据集的文件定义冲突所导致。

缺省操作: 异常终止任务。

100 个已锁定
RESP2 值:
106
尝试删除指定 RIDFLD 的记录,但存在针对此密钥的 保留 锁定 (请参阅 保留和活动锁定)。 如果请求指定 GENERIC 关键字,那么将删除所有可能的记录,但保留锁定的记录。 删除的记录数由 NUMREC 返回。

如果正在读取的记录被保留锁定,那么对使用锁定模型的可恢复 CFDT 的 DELETE 请求也可能发生 LOCKED 条件。 请参阅 耦合设施数据表保留锁定 ,以获取有关调查耦合设施数据表中记录的保留锁定的信息。

缺省操作: 使用代码 AEX8异常终止任务。

70 NOTAUTH
RESP2 值:
101
对 FILE (filename) 执行资源安全性检查失败。

缺省操作: 异常终止任务。

13 NOTFND
RESP2 值:
80
尝试根据提供的搜索参数删除记录失败。

对于用户维护的数据和耦合设施数据表,如果尝试删除记录失败,那么会发生此情况,因为数据表中没有具有指定键的条目。 如果在不使用 RIDFLD 的情况下尝试使用 DELETE 删除记录,并且该删除与在读取该记录以进行更新之后对此事务已删除的记录 (使用带有 RIDFLD 的 DELETE) 的 READ UPDATE 请求相关联,那么可能会发生此情况。

这并不意味着源数据集中没有这样的记录 (如果表是从一个表创建的); 可能是这样的记录存在,但在用户出口 XDTRD 初始装入期间被拒绝,或者后来被从数据表中删除。

对于耦合设施数据表,当使用争用模型向耦合设施数据表发出 DELETE 命令 (无 RIDFLD) 时,也会发生此情况,并且自读取记录以进行更新以来已删除该记录。

缺省操作: 异常终止任务。

19 NOTOPEN
RESP2 值:
60
由于下列其中一个原因,将返回 NOTOPEN (RESP2 60):
  • 请求的文件为 CLOSED 和 UNENABLED。 在接收到针对 OPEN ENABLED 文件的 CLOSE 请求并且该文件不再使用后,将达到 CLOSED , UNENABLED 状态。 还可以通过在 FILE 资源定义上指定 STATUS (UNENABLED) 和 OPENTIME (FIRSTREF) ,使 CLOSED , UNENABLED 成为初始状态。
  • 请求的文件是 OPEN ,正在由其他事务使用,但已接收到针对该文件的 CLOSE 请求。
  • 对因 SET DSNAME QUIESCED 或 IMMQUIESED 命令而停顿或正在停顿的数据集发出 DELETE 命令。
  • 请求的文件为 CLOSED 和 ENABLED ,因此 CICS 已尝试在执行请求的过程中打开该文件。 由于某种原因,此文件打开失败。 检查控制台以获取说明打开文件失败原因的消息。

如果对 CLOSED , DISABLED 文件发出请求,那么不会发生此情况。 在这种情况下,将出现 DISABLED 条件。

当删除刚读取以进行更新的记录时,也不能发生此情况。

缺省操作: 异常终止任务。

101 记录 DBUSY
RESP2 值:
107
指定了 NOSUSPEND 关键字以删除由 VSAM 活动 锁定的记录 (请参阅 保留锁定和活动锁定)。

如果请求指定 GENERIC 关键字,那么除保留的锁定记录外,将删除所有可能的记录。 删除的记录数由 NUMREC 返回。

缺省操作: 使用代码 AEX9异常终止任务。

53 个 SYSIDERR
RESP2 值:
130
SYSID 选项指定的名称不是本地系统或远程系统 (通过定义 CONNECTION 使 CICS 知道)。 当到远程系统的链路关闭时,也会发生 SYSIDERR。
131
对于耦合设施数据表,与耦合设施数据表服务器的连接已失败。 发生此故障的原因可能是服务器本身已发生故障,或者服务器可用,但 CICS 未能连接到该服务器。
132
将对不再存在的耦合设施数据表发出 DELETE 命令,这可能是因为耦合设施发生故障,在这种情况下,耦合设施数据表服务器也会发生故障。

缺省操作: 异常终止任务。

保留锁定和活动锁定

RECORDBUSY 指活动锁定, LOCKED 指保留锁定:
  • 对具有保留锁定的记录的 DELETE 请求始终被 LOCKED 响应拒绝。
  • 针对具有活动锁定等待释放锁定的记录的 DELETE 请求,除非指定了 NOSUSPEND 关键字,在这种情况下, CICS 将返回 RECORDBUSY 响应。

示例

以下示例显示如何删除 VSAM 数据集中的一组记录:
EXEC CICS DELETE
     FILE('MASTVSAM')
     RIDFLD(ACCTNO)
     KEYLENGTH(len)
     GENERIC
     NUMREC(NUMDEL)