REWRITE

更新文件中的记录。

REWRITE

读取语法图跳过可视语法图REWRITEFILE( filename)TOKEN( data-area)FROM( data-area)SYSID( 系统名称)LENGTH( data-value)LENGTH( data-value)NOSUSPEND

条件: CHANGED , DUPREC , FILENOTFOUND , ILLOGIC , INVREQ , IOERR , ISCINVREQ , ENGERR , LOCKED , NOSPACE , NOTAUTH , NOTFND , RECORDBUSY 和 SYSIDERR

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

描述

REWRITE 在本地或远程系统上更新文件中的记录。 必须始终在此命令之前使用带有 UPDATE 选项的读操作。

对于 VSAM 数据集,不得更改记录中的关键字段。

当此命令用于更新 CICS维护的数据表中的记录时,将对源 VSAM KSDS 和内存中数据表进行更新。 CICS维护的表的命令详细信息与 VSAM KSDS 相同。

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

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

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

选项

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

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

FROM (数据区)
指定要写入此文件所引用的数据集的记录。
LENGTH (data-value)
指定从中写入记录的数据区的长度 (作为半字二进制值)。

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

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

如果文件位于本地系统上,那么必须使用 INTO 选项为可变长度记录设置 LENGTH 参数,但不能为固定长度记录设置 LENGTH 参数。 但是,最好指定固定长度记录的长度,因为这会导致检查所写入的记录的长度是否不超过为数据集定义的长度。

NOSUSPEND (仅限 RLS)
如果 VSAM 对记录挂起活动锁定 (包括由于死锁而锁定的记录) ,那么请求不会等待。

如果更新涉及以 RLS 方式对具有一个或多个备用索引的 VSAM 数据集中的记录进行的更改,并且使用唯一键定义了备用索引,那么可能会发生锁定争用。

在大多数其他情况下,您不应该需要此选项,因为当任务发出 READ UPDATE 命令时将获取活动锁定。
注: 在 CICS 返回 RECORDBUSY 响应之前,指定 NOSUSPEND 等待至少 1 秒的请求。
SYSID (systemname)
指定请求所定向到的系统的名称。
TOKEN (数据区)
将 REWRITE 的唯一请求标识指定为全字二进制值,用于将其与指定了 UPDATE 的先前 READ , READNEXT 或 READPREV 命令相关联。

可以交付 TOKEN 函数。 但是,如果指定 TOKEN 的请求被交付到不支持 TOKEN 选项的 CICS 产品系列的成员,那么该请求将失败:

条件

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

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

14 个 DUPREC
RESP2 值:
150
如果备用索引中已存在相应的备用键,那么尝试将记录重写到其升级集具有具有 UNIQUEKEY 属性的备用索引的数据集。

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

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

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

21 ILLOGIC
发生此情况时,将终止当前正在进行的任何浏览。
RESP2 值: (VSAM)
110
发生不在其他某个 CICS 响应类别中的 VSAM 错误。

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

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

16 INVREQ
RESP2 值:
30
在没有令牌的情况下发出 REWRITE 命令,并且找不到先前的 READ for UPDATE (也没有令牌)。

找不到先前 READ for UPDATE 的可能原因是由于某种原因而失败,并且未正确处理或已忽略该失败。

46
REWRITE 命令尝试更改 BDAM 变长记录或块的长度。
47
REWRITE 指令包含其值不能与用于现有 READ for UPDATE 请求的任何令牌相匹配的令牌。
55
不允许 NOSUSPEND ,因为该文件不是以 RLS 方式访问的 VSAM 文件。
56
尝试更新可恢复耦合设施数据表失败,因为当前工作单元已更新 1024 个可恢复耦合设施数据表。 不能在工作单元中更新超过 1024 个可恢复耦合设施数据表
57
不允许 REWRITE 操作,因为关联的 VSAM 数据集的 AVAILABILITY 状态为 RREPL ,这将不允许此类操作 (来自复制程序的操作除外)。

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

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

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

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

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

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

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

22 LENGERR
RESP2 值:
10
未对具有可变长度记录的文件或具有未定义格式记录的 BDAM 文件指定 LENGTH 选项。
12
指定的长度超过 (数据表的源数据集的) 最大记录大小; 记录被截断。
14
为具有固定长度记录的文件指定了不正确的长度。

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

13 NOTFND
RESP2 值:
80
对于用户维护的数据表,当尝试 REWRITE 记录失败时,会发生此情况,因为 REWRITE 与该事务已删除的记录的 READ UPDATE 请求相关联 (使用带有 RIDFLD 的 DELETE)。 这可能是由应用程序中的逻辑错误引起的。

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

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

100 个已锁定
RESP2 值:
106
已尝试更新记录,但存在针对请求中涉及的唯一备用密钥的保留锁定。

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

18 次 NOSPACE
RESP2 值:
100
直接访问设备上没有可用于将更新后的记录添加到数据集的空间。
102
已超过为可恢复耦合设施数据表指定的最大记录数。 这可能发生在重写操作上,因为在落实更新之前,在耦合设施数据表中需要额外的记录以进行恢复。
103
对于用户维护的数据表,如果 CICS 无法在 CICS 地址空间中获取足够的存储空间来存储更新后的数据表条目,那么会发生此情况。
108
对于耦合设施数据表,如果耦合设施数据表池中没有足够的空间来存储更新后的记录,那么会发生此情况。

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

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

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

101 记录 DBUSY
RESP2 值:
107
指定了 NOSUSPEND ,但 VSAM 对请求中涉及的唯一备用索引键持有活动锁定,这将导致请求等待。 请参阅 保留锁定和活动锁定 以获取更多信息。

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

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

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

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

示例

下面是一个简单 REWRITE 命令的示例:
EXEC CICS REWRITE
     FROM(RECORD)
     FILE('MAIN')
     TOKEN(APTOK)