ProC SQL statements

最近遇到一个奇怪的问题, 花了半天时间,终于解决了问题, 但是还不清楚原因 :-(

在Pro C程序里写了以下的代码:

EXEC SQL UPDATE XXX_TABLE T
                  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, 事实证明这个方案行得通;

但是照现在这样写也没觉得有什么错啊, 如果是环境配置问题,早就该出现这种问题了, 为什么其他的程序运行良好呢。

现在把上面的语句改成下面的:

EXEC SQL UPDATE XXX_TABLE T
                  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) ;

居然编译通过, 一切正常...

谁能告诉我原因呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值