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中。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP