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中。

更新于:2020年9月14日

浏览量 1K+

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.