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ます。NULL 値標識がゼロより小さい値 (多くの場合 -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 インジケータ変数には、対応する値またはNULL 値が含まれている場合、0 未満の値が割り当てられます。その場合、とは変更されません (つまり、.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 に答える