当值为null时填充空格

时间:2012-11-06 03:12:47

标签: cobol

我在cobol上写一个平面文件。 但是当变量为null时,它不会填充空格。请帮忙。

这是平面文件结构声明的一部分。

01 Fs-IL494-REC.
   03 FX-IL494-TRXN-1-10                     PIC X(410) VALUE SPACES.

01 Wx-TRXN-INFO-BUF                PIC X(410) VALUE SPACES.
01 Ws-TRXN-INFO REDEFINES Wx-TRXN-INFO-BUF OCCURS 10 TIMES.
03 Wx-TRXN-DT                   PIC X(8).
03 Wx-TRXN-CDE                  PIC X(3).
03 W9-TRXN-AMT                  PIC S9(13)V9(2)
                                    SIGN LEADING SEPARATE.
03 Wx-TRXN-DESC                 PIC X(14).

Doing some query to retrive the records from database.

INITIALIZE Wx-TRXN-INFO-BUF.
INITIALIZE FX-IL494-TRXN-1-10.

ADD 1 TO W9-ARR-CNT
MOVE F9-IRC-TXN-DT TO Wx-TRXN-DT(W9-ARR-CNT)
MOVE F9-IRC-TXN-CDE TO Wx-TRXN-CDE(W9-ARR-CNT)
MOVE F9-IRC-TXN-AMT TO W9-TRXN-AMT(W9-ARR-CNT)
MOVE FX-IRC-TXN-DESC TO Wx-TRXN-DESC(W9-ARR-CNT)

MOVE Wx-TRXN-INFO-BUF TO FX-IL494-TRXN-1-10

2 个答案:

答案 0 :(得分:3)

我的假设:

  • 这是SQL(可能是DB / 2)
  • 您正在进行SELECT INTO :host-variable
  • 当相应的数据库表列包含host-variable值时,SPACES是您希望设置为NULL的内容。

如果上述情况正确,则问题是当从数据库中选择NULL值时,相应的host-variable不会更新。它将保留执行查询之前的任何值。

您可能需要在查询中添加null value indicator。当空值指示符设置为小于零(通常为-1)的值时,相应的主机变量保持不变。这是您应该使用的模式:

EXEC SQL
   SELECT column-name-1,
          column-name-2
   INTO :host-var-1 :null-ind-1,
        :host-var-2 :null-ind-2
   FROM some-table
   WHERE bla bla bla...
END-EXEC

“额外”变量null-ind-1null-ind-2应声明为S9(4) USAGE COMP。请注意,宿主变量和空指示符之间的逗号“缺失”。当相应的column-name-1column-name-2包含NULL值时,将为空指示符变量分配小于零的值。如果是这种情况,那么host-var-1host-var-2将保持不变(即保留EXEC SQL之前的任何值。

EXEC SQL之后的代码中,您应该执行以下操作:

IF null-ind-1 < ZERO
   MOVE SPACES TO host-var-1
END-IF
IF null-ind-2 < ZERO
   MOVE SPACES to host-var-2
END-IF

我还看到程序员在执行EXEC SQL之前简单地初始化所有主变量,无论他们想要什么,如果出现NULL列值而不打扰查询上的空指示符(不难发现原因)一旦你知道DB2在NULL值的情况下不会更新主变量,那么它将会工作。)

答案 1 :(得分:0)

Initialize与value子句绑定,它的行为可能很古怪而烦人。

在你阅读之前,简单地“将空格移动到我的记录中”会好得多......