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.