DCLGEN 实用程序如何为 VARCHAR(n) 数据类型提供 NULL 主变量?

如果 DB2 列没有明确定义为 'NOT NULL' 选项,则该列可以存储 NULL 值。但是,COBOL 没有任何 NULL 概念。为了处理这些 NULL 值,COBOL 程序对字符列使用空格,对具有 NULL 值的整数列使用零。

但是,主要挑战是如何检测特定列是否具有 NULL 值以及如何将空格/零移动到相应的主变量中。为了克服这个问题,DCLGEN 实用程序为每个可以包含空值的 DB2 列生成一个 NULL 指示符。NULL 指示符是一个 2 字节的字段,当相应的列中有 NULL 值时,该值取为 -1。COBOL 中NULL 指示符的配置是PIC S9(4) COMP。

例如,我们有一个数据类型为 VARCHAR(50) 的 DB2 列 ORDER_DESCRIPTION,它可以保存 NULL 值。DCLGEN 生成的此列的相应主机变量和 NULL 指示符如下所示:

01 ORDER-DESCRIPTION
   49 ORDER-DESCRIPTION-N PIC S9(4) COMP
49 ORDER-DESCRIPTION-DATA PIC X(50).

我们可以在如下所示的 COBOL-DB2 程序中检查 ORDER_DECRIPTION 列是否具有 NULL 值。

A010-CHECK-ORDER.
   EXEC SQL
   SELECT ORDER_DESCRIPTION INTO :ORDER-DESCRIPTION-DATA :ORDERDESCRIPTION-N
   FROM ORDERS
      WHERE ORDER_ID = :ORDER-ID
   END-EXEC
   IF ORDER-DESCRIPTION-N = -1
      MOVE SPACES TO ORDER-DESCRIPTION-DATA
END-IF

在此示例中,当 NULL 指示符的值为 -1 时,表示 ORDER_DESCRIPTION 列具有 NULL 值,并且在这种情况下我们移动了主变量 ORDER-DESCRIPTION-DATA 中的空格。

猜你喜欢