共享数据表服务与 VSAM 之间的差异

由于共享数据表服务会替换许多数据表请求的 VSAM ,因此实现某些请求的方式存在差异。

更新时读取 (不同事务)

对于由 另一 事务针对某个数据表记录发出的 READ UPDATE 之后并在关联的更新请求之前的数据表记录的 READ 命令,当使用共享数据表服务时,将立即处理 READ 命令。

使用 VSAM 时, READ 命令将等待更新请求完成。

更新时读取 (同一事务)
对于由 同一 事务针对该记录发出的 READ UPDATE 之后且在关联的更新请求之前的数据表记录的 READ 命令,当使用共享数据表服务时,将立即处理 READ 命令。

使用 VSAM 时,事务会导致死锁异常结束 AFCG。

浏览期间删除

当共享数据表服务用于数据表记录的 STARTBR 或 RESETBR 命令时,可以在发出关联的 READNEXT 或 READPREV 命令之前删除该记录。 使用 VSAM 时,在发出关联的 READNEXT 或 READPREV 命令之前,无法删除记录。

因此,当使用共享数据表服务时,如果使用除特殊 "最后记录" 键 X'FF .... " 以外的键发出 STARTBR 或 RESETBR 命令, 并且在 READNEXT 命令之前删除所选择的记录, READNEXT 命令读取后续记录。

如果没有后续记录,那么将返回 ENDFILE 条件。 如果在 STARTBR 或 RESETBR 上使用了 EQUAL 选项,那么读取的记录的键可能与指定的键不匹配。

如果使用特殊的 "last record" 键发出了 STARTBR 或 RESETBR 命令,并且在 READPREV 命令之前删除了选定的记录,那么 READPREV 命令将读取前面的记录,如果没有记录,那么将返回 ENDFILE 条件。

浏览期间写入
使用共享数据表服务时,如果浏览读取到文件末尾,引发 ENDFILE 条件,然后在文件末尾之外插入新记录,那么后续 READNEXT 能够读取新记录。

使用 VSAM 时,后续 READNEXT 可能无法找到新记录,而是再次报告 ENDFILE 条件。

更新时删除 (同一事务)

当共享数据表服务用于一个 DELETE 命令,该命令在同一事务对该记录发出 READ UPDATE 之后并在关联的更新请求之前为该记录指定 RIDFLD 时,会成功处理 DELETE 命令,并且关联的更新请求接收到 NOTFND 条件。