WRITE

撰写记录。

语法

WRITE

读取语法图跳过可视语法图WRITEFILE( filename)MASSINSERTFROM( data-area)RIDFLD( data-area)KEYLENGTH( data-value)SYSID( 系统名称)LENGTH( data-value)LENGTH( data-value)RBARRNXRBANOSUSPEND

条件: DISABLED , DUPREC , FILENOTFOUND , ILLOGIC , INVREQ , IOERR , ISCINVREQ , ENGERR , LOADING , LOCKED , NOSPACE , NOTAUTH , NOTOPEN , RECORDBUSY , SUPPORTED , SYSIDERR

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

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

描述

WRITE 将新记录写入本地或远程系统上的文件。

当此命令用于将记录写入 CICS维护的数据表时,将对源 VSAM KSDS 和内存中数据表进行更新,除非 XDTAD 用户出口拒绝该表中的记录。 CICS维护的表的命令详细信息与 VSAM KSDS 相同。

当使用此命令将记录写入用户维护的数据表时,将对内存中的数据表进行更新 (除非被 XDTAD 用户出口拒绝)。

当使用该命令将记录写入耦合设施数据表时,将对耦合设施中的数据表进行更新 (除非 XDTAD 用户出口拒绝)。

如果由于空间不足而无法成功写入用户维护的表或耦合设施数据表,那么将向命令返回 NOSPACE 响应。 CICS 还会发出消息 DFHFC0432 以提醒系统管理员注意此情况。

对于 VSAM ESDS 或 VSAM 扩展格式 (扩展寻址 ESDS) ,将始终在数据集的末尾添加记录。 在计算新记录的相对字节地址 (RBA) 时, CICS 不使用 RIDFLD 中指定的标识字段,对于扩展寻址 ESDS ,也不使用扩展相对字节地址 (XRBA)。 但是,新的 RBA 或 XRBA 将返回到 RIDFLD 选项中指定的记录标识字段中的应用程序。

对于 VSAM KSDS ,将在关联键指定的位置中添加记录; 此位置可能位于数据集中的任何位置。 对于 VSAM 数据集,记录中的键和 RIDFLD 标识字段中的键必须相同。

对于 VSAM ESDS 或 KSDS ,记录可以是固定长度或可变长度。 MASSINSERT 操作必须继续执行升序键,并且必须在对同一数据集的任何其他请求之前由 UNLOCK 终止。

选项

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

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

FROM (数据区)
指定要写入此文件所引用的数据集的记录。
KEYLENGTH (data-value)
指定 RIDFLD 选项中指定的键的长度 (半字二进制) ,除非指定了 RBA 或 RRN ,在这种情况下, KEYLENGTH 无效。 如果您还在使用 SYSID (除非您还在使用 RBA 或 RRN) ,那么必须对 KEYLENGTH 进行编码。 如果指定的长度与为数据集定义的长度不同,那么会出现 INVREQ 条件。 当提供 WRITE FILE 函数时,需要 KEYLENGTH 子句,否则可能会出现 RESP2=23 的 INVREQ。
LENGTH (data-value)
指定从中写入记录的数据区的长度 (作为半字二进制值)。

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

如果文件位于远程系统上并且 指定 SYSID ,那么无需在此处设置 LENGTH 参数,但必须在文件资源定义中设置 LENGTH 参数。

如果文件位于本地系统上,那么必须为可变长度记录指定 LENGTH 选项,但对于固定长度记录是可选的。 但是,建议指定固定长度记录的长度,因为这会导致 CICS 检查所写入的记录长度是否不超过为数据集定义的长度。

如果对具有固定长度记录的文件的 WRITE 指定了不正确的长度,那么将写入固定长度的记录并提出 LENGERR 条件。 如果提供的数据过多,那么会截断记录。 如果提供的数据太少,那么将使用二进制零填充记录。

马辛塞特
(VSAM) 指定 WRITE 命令是批量插入操作的一部分,即,每个指定 MASSINSERT 的一系列 WRITE。

有关对以 RLS 访问方式打开的文件使用 MASSINSERT 的信息,请参阅 RLS 记录级别锁定

不能将 MASSINSERT 用于用户维护或耦合设施数据表。

注: 避免在将记录写入空 VSAM 数据集的并行 (必需) 程序中使用 MASSINSERT ,因为当文件处于装入方式时,将对每个写操作执行从开放式 TCB 切换到 QR TCB 并再次切换的 TCB。 您应该在不进行批量插入的情况下使用单个 WRITE ,以避免 TCB 切换。 有关更多信息,请参阅 装入空 VSAM 数据集
NOSUSPEND (仅限 RLS)
如果 VSAM 对记录挂起活动锁定 (包括由于死锁而锁定的记录) ,那么请求不会等待。
如果密钥用于另一个任务正在修改,创建或删除的记录,那么当任务发出 WRITE 请求时,该任务可能会等待,因为 VSAM 始终首先获取锁定。
注: 在 CICS 返回 RECORDBUSY 响应之前,指定 NOSUSPEND 等待至少 1 秒的请求。
RBA
(仅限 VSAM ESDS 基本数据集) 指定 RIDFLD 选项中指定的记录标识字段包含相对字节地址。 仅当写入 ESDS 库时才使用此选项。
RIDFLD (数据区)
指定记录标识字段。 内容可以是键,相对字节地址或相对记录号 (对于 VSAM 数据集) ,也可以是块引用,物理键和去块参数 (对于 BDAM 数据集)。 对于相对字节地址或相对记录号,此字段的格式必须是全字二进制。 如果指定了 RBA 或 XRBA ,那么如果命令成功,那么 RIDFLD 是包含记录的相对字节地址 (大于或等于零) 的输出字段。 此 RBA 值由 CICS为您计算。 如果指定了 RRN ,那么 RIDFLD 包含要写入的记录的相对记录号 (大于或等于 1)。

有关定义记录标识字段的更多信息,请参阅 标识 BDAM 记录标识 VSAM 记录

将记录添加到键控数据集时,该字段必须包含完整键。

RRN
(VSAM RRDS) 指定 RIDFLD 选项中指定的记录标识字段包含相对记录号。
SYSID (systemname)
指定请求所定向到的系统的名称。

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

LENGTH 必须明确指定,或者能够通过汇编语言中的长度属性引用或 PL/I 中的 STG 和 CSTG 从 FROM 选项中默认。 LENGTH 必须在 C® 中明确指定。

XRBA
指定 RIDFLD 选项中指定的记录标识字段包含扩展的相对字节地址。 写入扩展寻址 ESDS 数据集时使用此选项。

条件

84 已禁用
RESP2 值:
50
文件最初定义为已禁用,但此后未启用,或者已被 SET FILE 或 CEMT SET FILE 命令禁用。

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

14 个 DUPREC
RESP2 值:
150
尝试通过引用文件或文件上的路径 (具有 UNIQUEKEY 属性) 将记录添加到数据集,在该文件中已存在相同的键。

对于使用争用模型的耦合设施数据表,也会出现此情况,即使另一个任务已读取具有相同键的记录进行更新也是如此。 (对于使用锁定模型的耦合设施数据表以及所有其他类型的文件,如果另一个任务已读取要更新的记录,那么将锁定该记录,而 WRITE 请求将等待释放锁定,而不是立即返回 DUPREC 响应。)

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

12 个 FILENOTFOUND
RESP2 值:
1
未对 CICS定义 FILE 选项中引用的文件名。

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

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

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

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

16 INVREQ
RESP2 值:
20
根据资源定义,不允许执行添加操作。
23
写入包含嵌入式键的记录时,记录区域 (FROM 选项) 中的键与 RIDFLD 中的键不匹配。
26 日
指定了 KEYLENGTH 选项,并且指定的长度不等于为此文件所引用的数据集定义的长度。
38
针对 BDAM 文件发出带有 MASSINSERT 选项的 WRITE。
40
发生 BDAM 密钥转换错误。
44
WRITE 命令不符合用户维护或耦合设施数据表的 WRITE 格式 (例如,指定了 MASSINSERT 或 RBA)。
51
对以 RLS 方式访问的 KSDS 文件发出了指定 RBA 关键字的 WRITE 命令。 RLS 方式不支持对 KSDS 文件的相对字节地址访问。
55
不允许 NOSUSPEND ,因为该文件不是以 RLS 方式访问的 VSAM 文件。
56
尝试更新可恢复耦合设施数据表失败,因为当前工作单元已更新 1024 个可恢复耦合设施数据表。 不能在工作单元中更新超过 1024 个可恢复耦合设施数据表
57
不允许 WRITE 操作,因为关联的 VSAM 数据集的 AVAILABILITY 状态为 RREPL ,这将不允许此类操作 (来自复制程序的操作除外)。
59
指定了 XRBA ,但数据集不是扩展寻址 ESDS。

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

17 IOERR
RESP2 值:
120
文件控制操作期间发生 I/O 错误。 I/O 错误是 CICS 条件未涵盖的任何异常事件。 EXEC 接口块中提供了更多信息; 有关详细信息,请参阅 EIB 字段

对于 VSAM 文件, IOERR 通常指示硬件错误。

对于 BDAM 文件, IOERR 可能意味着您尝试写入未针对数据集定义的 BDAM 磁道地址。

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

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

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

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

22 LENGERR
RESP2 值:
12
为写操作指定的长度超过最大记录大小; 记录被截断。
10
未指定 LENGTH 选项。 必须为具有可变长度记录的文件或具有未定义格式的记录的 BDAM 文件的 WRITE 指定 LENGTH。
14
为具有固定长度记录的文件的 WRITE 指定了不正确的长度。 已写入固定长度的记录。 如果提供的数据过多,那么会截断记录。 如果提供的数据太少,那么将使用二进制零填充记录。
94 个 LOADING
RESP2 值:
104
无法满足请求,因为该请求是针对仍在装入的数据表发出的。 由于下列原因之一,可以提出该条件:
  • WRITE 指定迄今为止装入到耦合设施数据表中的记录范围之外的记录键。 仅当指定的键在已装入的记录的范围内时,才能在 CFDT 装入时添加记录。

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

  • 向当前正在装入的用户维护的数据表发出 WRITE。 在装入期间无法修改用户维护的数据表。

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

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

100 个已锁定
RESP2 值:
106
已尝试写入记录,但存在对此记录的键的保留锁定。

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

18 次 NOSPACE
RESP2 值:
100
直接访问设备上没有可用于将记录添加到数据集的空间。
102
已达到为用户维护的表或耦合设施数据表指定的最大表项数。

对于可恢复耦合设施数据表,如果存在未落实的未落实更新,那么该表显然包含的记录数少于允许的最大记录数时,也会发生此情况。

103
CICS 无法在 CICS 地址空间中获取足够的存储空间,无法为正在写入的记录创建内存表条目。
108
耦合设施数据表池中没有足够的空间来存储记录。

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

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

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

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

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

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

101 记录 DBUSY
RESP2 值:
107
在请求上指定了 NOSUSPEND ,但 VSAM 保留了对记录的活动锁定,这将导致请求等待。 请参阅 保留锁定和活动锁定 以获取更多信息。

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

72 已禁止
RESP2 值:
105
在 XDTAD 出口点调用的用户出口程序决定不将记录添加到用户维护或耦合设施数据表。

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

53 个 SYSIDERR
RESP2 值:
130
SYSID 选项指定的名称既不是本地 CICS 区域,也不是由 CONNECTION 定义对 CICS 定义的远程系统。 当到远程系统的链路关闭时,也会发生 SYSIDERR。
131
对于耦合设施数据表,与耦合设施数据表服务器的连接已失败。 这可能是因为服务器本身已发生故障,或者服务器可用,但 CICS 未能连接到该服务器。
132
对不再存在的耦合设施数据表发出 WRITE ,可能是因为耦合设施故障,在这种情况下,耦合设施数据表服务器也会发生故障。 有关重新启动耦合设施数据表服务器和重新装入表的信息,请参阅 设置和运行耦合设施数据表服务器

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

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

示例

以下是简单 WRITE 命令的示例:
EXEC CICS WRITE
     FROM(RECORD)
     LENGTH(DATLEN)
     FILE('MAIN')
     RIDFLD(KEYFLD)