Oracle在这方面是有一些限制,
但是可以换个方法执行,
用Oracle的Package试一下。

解决方案 »

  1.   

    sql 语句大概是(我已经作了简化)
    update
    (select c.c1, c.c2 cc2, c.c3 cc3, c.c4 cc4 from c)
    set c1 = c1 +
    (
    select nvl(sum(p.p1),0)
    from p where p.p2 = cc2 and p.p3 = cc3 and p.p4=cc4
    );
    将其直接在sqlplus中执行 成功
    如果写成plsql ,(加上begin...end)则执行失败我的store procedure 都是写在package 中的。
      

  2.   

    我试了一下,看来是不行,ORACLE的解释是使用了不适当的语法单位。
    这样写是可以的:
    update
    (select c.c1, c.c2 cc2, c.c3 cc3, c.c4 cc4 from c)
    set c1 = c1 + 表达式);看来在PL/SQL语句里编译不了这么复杂的语句。
      

  3.   

    用ORACLE自己的PACKAGE:DBMS_SQL应该能执行所有的SQL语句.
      

  4.   

    oracle的嵌套查询能力确实不敢恭维。以前写pl/sql的时候,还碰到一个恶心的问题,就是一种类型的嵌套查询过后出错,end of communication channel,出错信息大概是这个样子的,当前session就这么断了。各位,还有谁碰到了?就在oracle 8.1.5上。8.0.5没事。8i的后继版本没试过。:)