最近遇到一个奇怪的问题, 花了半天时间,终于解决了问题, 但是还不清楚原因 :-(
在Pro C程序里写了以下的代码:
SET T.AMOUNT = T.AMOUNT - 0.01 ,
T.AMOUNT_X = T.AMOUNT_X + 0.01
WHERE T.AMOUNT = - T.AMOUNT_X AND
T.AMOUNT -
(SELECT SUM(A.X_AMOUNT)
FROM XXX_TABLE _HISTORY A
WHERE A.NO = T.NO) = 0.01 ;
预编译出现以下错误:
Error at line 3270, column 36 in file retifydb.pc
(SELECT SUM(A.X_AMOUNT)
...................................1
PCC-S-02201, Encountered the symbol "SUM" when expecting one of the following:
( ) * + - / . @ | at, day, hour, minute, month, second, year,
The symbol "(" was substituted for "SUM" to continue.
Syntax error at line 3271, column 31, file ret_awardsretifydb.pc:
Error at line 3271, column 31 in file ret_awardsretifydb.pc
FROM XXX_TABLE _HISTORY A
..............................1
PCC-S-02201, Encountered the symbol "FROM" when expecting one of the following:
, ) * + - / | at, day, hour, minute, month, second, year,
Syntax error at line 3272, column 66, file ret_awardsretifydb.pc:
Error at line 3272, column 66 in file ret_awardsretifydb.pc
WHERE A.NO = T.NO) = 0.01;
.................................................................1
PCC-S-02201, Encountered the symbol "=" when expecting one of the following:
) union, intersect, minus, order,
Error at line 0, column 0 in file ret_awardsretifydb.pc
PCC-F-02102, Fatal error while doing C preprocessing
*** Error exit code 1
后来改写成PL/SQL, 事实证明这个方案行得通;
但是照现在这样写也没觉得有什么错啊, 如果是环境配置问题,早就该出现这种问题了, 为什么其他的程序运行良好呢。
现在把上面的语句改成下面的:
SET T.AMOUNT = T.AMOUNT - 0.01 ,
T.AMOUNT_X = T.AMOUNT_X + 0.01
WHERE T.AMOUNT = - T.AMOUNT_X AND
T.AMOUNT - 0.01 =
(SELECT SUM(A.X_AMOUNT)
FROM XXX_TABLE _HISTORY A
WHERE A.NO = T.NO) ;
居然编译通过, 一切正常...
谁能告诉我原因呢?