Cobol 值为null时填充的空格
我正在用cobol写一个平面文件。 但是当变量为null时,它将不会填充空格。请帮忙 下面是平面文件结构声明的一些部分Cobol 值为null时填充的空格,cobol,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
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
我的假设:
- 这是SQL(可能是DB/2)
- 您正在执行一个
选择进入:主机变量
- 当相应的数据库表列包含
值时,NULL
就是您希望设置为主机变量
空格
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-ind-2
应声明为S9(4)用法COMP
。请注意,主机变量和null指示符之间的逗号“丢失”。当相应的column-name-1
或column-name-2
包含空值时,将为空指示符变量分配一个小于零的值。如果是这种情况,则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
如果null-ind-1<0
将空格移动到host-var-1
端到端IF
如果null-ind-2<零
将空格移动到host-var-2
端到端IF
我还看到程序员在执行
EXEC SQL
之前,只需初始化所有主机变量,在出现空列值的情况下,不必为查询中的空指示符操心(一旦知道DB2不会在出现空值的情况下更新主机变量,就不难理解为什么会这样做)..Initialize与value子句绑定,它的行为可能古怪而烦人
简单的“将空间移动到我的记录”要好得多在您阅读之前…这里没有任何问题。我通常不使用INITIALIZE,但我怀疑这是您遇到问题的原因。我们讨论的是哪个变量?请填写您的查询-SELECT语句等。这应该可以验证NealB下面的答案。@davidgorline-我想知道为什么您通常不使用INITIALIZE?@Buggabill:Joe Zitzelberger的回答抓住了我的想法。在我工作过的大多数商店里,如果一个老掉牙的buggy编译器做了一些不愉快的事情,这通常是民间传说的一部分,它与初始化有关。@DavidGorsline-我部分同意,但你最终遇到的问题是你可能会失败我猜动词的简洁和“魔力”吸引了我…:-)你觉得INITIALIZE与value子句有什么联系?你有“古怪”的例子吗?是的,如果需要,在本例中,移动空间更好。