应用程序迁移挑战 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

应用程序迁移挑战

当您将应用程序从 EBCDIC 迁移到 ASCII 时,我们建议您分析并减少应用程序中的任何 EBCDIC 依赖项。这包括分析源代码依赖项和排序序列。

源代码依赖项

检查用于表示数值的字符至关重要,因为当源代码从 EBCDIC 转换为 ASCII 时,这些字符会发生变化。一些大型机程序员使用以下技术来表示 copybook 或工作存储中 COMP 字段的数字数据,如以下示例所示。

01 CHAR-74        PIC 99 COMP VALUE "¢".

在 EBCDIC 中,前面示例的值为 X"41"(数字为 "74")。如果源数据转换为 ASCII,该字符将变为 X"5B"(数字为 "91")。此更改不会导致编译器问题,但可能会导致难以调试的编程问题。以下示例显示了一个有效的解决方案,该解决方案将源更改为包含实际数值。

01 CHAR-74        PIC 99 COMP VALUE 74.

我们还建议您检查是否使用了嵌入的十六进制字符,如下例所示。

IF WS-DATA(1:1) = X"5B" …

在 EBCDIC 中,前面的示例测试字段的第一个字符,看它是否是 "$"。"$" 的 ASCII 表示为 X"24"。以下示例显示了使用预期字符的有效解决方案。

IF WS-DATA(1:1) = "$" …

并非所有 X"nn" 值都会引起问题。例如,常量 LOW-VALUE 是 X"00",HIGH-VALUE 是 X"FF"。LOW-VALUES(X"00")通常用于初始化无符号二进制字段。例如,以下语句不需要任何更改。

MOVE ALL X"00" TO WS-DATA

HIGH-VALUES(X"FF")有时用作数据标记,以确保记录位于 SORT 的末尾或标记文件的末尾。例如,以下语句不需要任何更改。

MOVE ALL X"FF" TO WS-DATA

前面两个语句在 EBCDIC 或 ASCII 环境中的作用相同。

排序序列

在 EBCDIC 中,字母字符优先于数值。在 ASCII 中,数值优先于字母字符。因此,VSAM 中的字母数字键字段或包含字母和数字值混合的数据库在迁移后以不同的顺序返回数据。我们建议您在应用程序级别分析排序序列的影响,以确定正确的修复策略。

下表显示了字母数字数据的简单示例,以及如何在 EBCDIC 和 ASCII 中对这些数据进行排序。

EBCDIC

ASCII

A1

1A

A2

2B

1A

A1

2B

A2

 排序序列会影响下列内容的返回:

  • VSAM 键控存取(注意:VSAM 文件按创建文件的排序序列返回数据。即使 COBOL 程序被编译为使用 EBCDIC 排序序列,使用 ASCII 排序序列构建的 VSAM 文件也会使用 ASCII 排序序列返回数据。ASCII 排序序列可能会导致应用程序问题。)

  • 内部或外部 SORT 函数

  • 条件语句

  • SQL 游标(注意:除非 DECLARE 语句中定义了排序序列,否则 SQL 游标将按创建数据库的排序序列的顺序返回数据。即使 COBOL 程序被编译为使用 EBCDIC 排序序列,使用 ASCII 排序序列构建的数据库也会使用 ASCII 排序序列返回数据。ASCII 排序序列可能会导致应用程序问题。)

排序序列依赖项还可以扩展到应用程序之外,延伸到物理世界。例如,可以使用 EBCDIC 值订购仓库储物箱上的条形码。将应用程序更改为 ASCII 可能需要物理更改储物箱上的条形码。