DCLGEN实用程序如何为VARCHAR(n)DB2数据类型容纳NULL主机变量?

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

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

例如,我们有一个DB2列ORDER_DESCRIPTION,其数据类型为VARCHAR(50),它可以保存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中移动了空格。

猜你喜欢