这个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.
任何想法?谢谢:)
答案 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
,否则它将对一个级别感到满意。