READQ TD

从瞬时数据队列读取数据。

语法

READQ TD

读取语法图跳过可视语法图READQ TDQUEUE( 名称)INTO( data-area)SET( ptr-引用)LENGTH( data-area)SYSID( 系统名称)NOSUSPEND

条件: DISABLED , INVREQ , IOERR , ISCINVREQ , ENGERR , LOCKED , NOTAUTH , NOTOPEN , QBUSY , QIDERR , QZERO 和 SYSIDERR

当此命令与本地 CICS® 区域中的队列一起使用时,或者与通过 IPIC 连接提供给远程 CICS 区域的函数一起使用时,此命令是线程安全的。 当通过其他类型的连接将功能交付到远程 CICS 区域时,它是非线程安全的。

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

描述

READQ TD 从队列中读取瞬时数据 (之后记录不再可用)。

如果您正在使用自动事务启动 (ATI) ,那么应用程序应测试 QZERO 条件,以确保仅当队列为空时才会终止自动启动的任务。 有关 ATI 的介绍性信息,请参阅 自动事务启动 (ATI)

如果 READQ TD 命令尝试访问逻辑可恢复的分区内队列中正在写入或被另一个任务删除的记录,并且没有更多已落实的记录,那么该命令将等待该队列不再用于输出。 但是,如果指定了 NOSUSPEND 选项,或者存在用于 QBUSY 的活动 HANDLE CONDITION ,那么将产生 QBUSY 条件。

选项

INTO (data-area)
指定要将从瞬时数据队列读取的数据放入其中的用户数据区。
LENGTH (数据区)
指定要读取的记录的长度 (作为半字二进制值)。

如果指定 INTO 选项,那么 LENGTH 指定程序接受的数据的最大长度。 如果指定的值小于零,那么将提出 LENGERR 条件并且不会读取队列。 如果指定的值为零,那么将提出 LENGERR 条件并读取队列。 如果数据的长度超过指定的值,那么会将数据截断为该值,并且会出现 LENGERR 条件。 完成检索操作后,数据区将设置为从队列中读取的数据记录的原始长度。

如果指定 INTO 选项,那么如果可由编译器从 INTO 变量生成长度,那么无需指定 LENGTH。 请参阅 翻译注意事项:有关何时必须指定 LENGTH 的详细信息,请参阅 EXEC CICS 命令中的 LENGTH 选项

无暂挂
指定如果应用程序尝试从已用于输出的队列中读取,那么在队列变为可用之前不会暂挂该任务。 而是会引发 QBUSY 条件。

但是,请注意,如果在执行命令时 QBUSY 的 HANDLE CONDITION 处于活动状态,那么这也会覆盖缺省操作,并将控制权传递到 HANDLE CONDITION 中提供的用户标签。 这优先于 NOSUSPEND 选项,但当然会被 NOHANDLE 或 RESP 否定。

此选项仅适用于分区内队列。

QUEUE (名称)
指定要从中读取的队列的符号名称 (1-4 字母数字字符)。 指定的队列必须已定义到 CICS。

如果指定了 SYSID ,那么将假定该队列位于远程系统上,无论该队列是否定义为远程系统。 否则,将使用瞬时数据队列定义来确定数据集是在本地系统上还是在远程系统上。

SET (ptr-ref)
指定要设置为从队列中读取的数据的地址的指针引用。 CICS 获取足以保存记录的区域,并将指针引用设置为该区域的地址。 将保留该区域,直到执行另一个瞬时数据命令为止。 除非被其他命令或语句更改,否则指针引用在下一个 READQ TD 命令或任务结束之前有效。

如果 DATALOCATION (ANY) 与应用程序相关联,那么数据的地址可以高于或低于 16 MB 界线。

如果 DATALOCATION (BELOW) 与应用程序相关联,并且数据位于 16 MB 线以上,那么数据将复制到 16 MB 线以下,并返回此副本的地址。

如果为正在运行的任务指定了 TASKDATAKEY (USER) ,并且存储器保护处于活动状态,那么返回的数据在用户密钥中。 如果指定了 TASKDATAKEY (CICS) 并且存储器保护处于活动状态,那么返回的数据位于 CICS-key 中。

SYSID (systemname)
(仅限远程系统) 指定请求所定向到的系统的名称 (1-4 个字符)。

条件

84 已禁用
在已禁用队列时发生。

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

16 INVREQ
如果 READQ 指定了已打开用于输出的分区外队列,那么将发生此情况。 对于分区内队列,不能发生此情况。

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

17 IOERR
当发生输入/输出错误并且跳过出错的数据记录时发生。

如果可以读取队列,那么会发生此情况; 如果无法读取队列,那么会在此情况下发生 QZERO 条件。

如果在分区外队列的数据集定义中使用了 FREE=CLOSE 操作数,并且该队列已关闭并重新打开,那么也会发生此情况。

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

54 ISCINVREQ
当远程系统指示不符合已知条件的故障时发生。

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

22 LENGERR
如果 READQ 指定了无法保存要返回到应用程序的所有数据或提供了无效长度的 INTO 区域,那么将发生此情况。 此检查是在调用 XTDIN 出口之后进行的。

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

100 个已锁定
在无法执行请求时发生,因为由于工作单元失败不确定而限制了对队列的使用。 对于在 TDQUEUE 资源定义中使用 WAIT (YES) 和 WAITACTION (REJECT) 定义的逻辑可恢复队列的任何请求,都可能发生此情况。

如果您希望事务等待,请在 TDQUEUE 资源定义中指定 WAIT (YES) 和 WAITACTION (QUEUE)。

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

70 NOTAUTH
在 QUEUE (名称) 上的资源安全性检查失败时发生。

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

19 NOTOPEN
在目标关闭时发生。 此条件仅适用于分区外队列。

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

25 个 QBUSY
如果 READQ TD 命令尝试访问逻辑可恢复的分区内队列中正在写入或正在被另一个任务删除的记录,并且没有更多已落实的记录,那么将发生此情况。

必须指定 NOSUSPEND 选项,或者条件的 HANDLE 必须处于活动状态,才能引发此条件。

此条件仅适用于分区内队列。

缺省操作: 忽略条件。

44 QIDERR
如果找不到要与 READQ TD 配合使用的符号目标,那么将发生此情况。

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

23 QZERO
当目标 (队列) 为空或已到达队列末尾时发生。

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

53 个 SYSIDERR
当 SYSID 选项指定既不是本地系统也不是远程系统 (通过定义 CONNECTION 或 IPCONN使 CICS 知道) 的名称时发生。 当到远程系统的链路关闭时,也会发生 SYSIDERR。

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

示例

以下示例显示如何将记录从分区内数据集 (队列) (在本例中是控制系统消息日志 (CSML)) 读取到请求中指定的数据区中:
EXEC CICS READQ TD
     QUEUE('CSML')
     INTO(DATA)
     LENGTH(LDATA)
以下示例显示如何将具有固定长度记录的分区外数据集 (队列) 中的记录读入 CICS提供的数据区; SET 选项指定的指针引用设置为为数据记录保留的存储区的地址。 假定记录长度已知。
EXEC CICS READQ TD
     QUEUE(EX1)
     SET(PREF)