2

此 sql 似乎还可以,但在编译过程中遇到错误..

SELECT COUNT(*)
INTO :W9-TOT-TRXN
FROM IRC02
WHERE SUBSTR(P9_IRC_PST_DT,1,6) = :Ws-DATE-YM
AND F9_IRC_FI = :W9-FI-PARAM
AND P9_IRC_PRIN_CRN = :F9-IR025-CRN
AND F9_IRC_LOC_ACCT = :F9-IR025-LOC-ACCT

错误信息如下:

文件 RCCO.cbl 中第 757 行第 60 列的错误

                    WHERE SUBSTR(P9_IRC_PST_DT,1,6) = :Ws-DATE-YM

PCB-S-00204,不能在 INTO 或 VALUES 子句中使用组项目

01 Ws-DATE-YMD.
03 Ws-DATE-YM.
   05 W9-DATE-YY      PIC 9(04) VALUE ZEROES.
   05 W9-DATE-MM      PIC 9(02) VALUE ZEROES.
03 W9-DATE-DD         PIC 9(02) VALUE ZEROES.

任何的想法 ?谢谢 :)

4

2 回答 2

2

您还可以使用 REDEFINES 来避免添加 MOVE 语句:

03 Ws-DATE-YM.
   05 W9-DATE-YY      PIC 9(04) VALUE ZEROES.
   05 W9-DATE-MM      PIC 9(02) VALUE ZEROES.
03 Wx-DT-YM PIC 9(6) REDEFINES Ws-DATE-YM.
于 2012-09-17T21:47:57.657 回答
1

如错误所述,组项目不能用作where子句中的主变量。您需要单独引用基本项目,例如:

SELECT COUNT(*)
INTO :W9-TOT-TRXN
FROM IRC02
WHERE SUBSTR(P9_IRC_PST_DT,1,4) = :Ws-DATE-YM.W9-DATE-YY
AND SUBSTR(P9_IRC_PST_DT,5,2) = :Ws-DATE-YM.W9-DATE-MM
AND F9_IRC_FI = :W9-FI-PARAM
AND P9_IRC_PRIN_CRN = :F9-IR025-CRN
AND F9_IRC_LOC_ACCT = :F9-IR025-LOC-ACCT

或者也许性能更高:

WHERE SUBSTR(P9_IRC_PST_DT,1,6) = :Ws-DATE-YM.W9-DATE-YY || :Ws-DATE-YM.W9-DATE-MM

虽然我来自文档而不是经验,但这是完全未经测试的;也不确定您是否需要Ws-DATE-YMD在两个部分之前都包含父级,或者它会对一个级别感到满意。

于 2012-09-12T08:19:49.607 回答