除INTO或VALUES子句外,不能使用组项

时间:2012-09-12 07:31:19

标签: sql oracle cobol

这个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

错误信息如下:

第757行,第60列,文件RCCO.cbl

中的错误
                    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.

任何想法?谢谢:)

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

正如错误所说,

Group items cannot be used as host variables in the where clause。您需要单独引用基本项目,例如:

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,否则它将对一个级别感到满意。