我在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
答案 0 :(得分:3)
我的假设:
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-1
和null-ind-2
应声明为S9(4) USAGE COMP
。请注意,宿主变量和空指示符之间的逗号“缺失”。当相应的column-name-1
或column-name-2
包含NULL值时,将为空指示符变量分配小于零的值。如果是这种情况,那么host-var-1
和host-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子句绑定,它的行为可能很古怪而烦人。
在你阅读之前,简单地“将空格移动到我的记录中”会好得多......