1

我正在写一个在 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
4

2 回答 2

3

我的假设:

  • 这是 SQL(可能是 DB/2)
  • 你正在做一个SELECT INTO :host-variable
  • 当相应的数据库表列包含一个值时,这host-variable是您期望设置的内容。SPACESNULL

如果以上是正确的,那么问题是当一个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-1为. 请注意,主变量和空指示符之间“缺少”逗号。当相应的或包含 NULL 值时,将为空指示符变量分配一个小于零的值。如果是这种情况,那么和将保持不变(即保留它们在.null-ind-2S9(4) USAGE COMPcolumn-name-1column-name-2host-var-1host-var-2EXEC 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 列值执行任何他们想要的操作之前简单地初始化所有主机变量,而不用在查询中使用 null 指示符(一旦你知道 DB2 将不难弄清楚为什么它会起作用)在 NULL 值的情况下不更新主机变量)..

于 2012-11-06T15:47:53.717 回答
0

Initialize 与 value 子句相关联,它的行为可能古怪而烦人。

在您阅读之前,简单的“将空间移动到我的记录”要好得多......

于 2012-11-07T14:32:34.427 回答