sum()不用NVL()函数
应该没有问题。报的什么错?

解决方案 »

  1.   

    show errors procedures 过程名;
      

  2.   

    procedures去掉s
    或者:直接用pl/sql(如:pl/sql edit,pl/sql developer)工具编译。
      

  3.   

    UPDATE fa_fas_detail x
       SET fas_depretotal =
                           (SELECT x.fas_deprebefore + NVL (SUM (fsd_amount), 0)
                              FROM fa_fas_depre
                             WHERE fsd_fasid = fas_id)
      

  4.   

    源代码:
    CREATE OR REPLACE PROCEDURE UpdBatch (
       p_Date  in char) AS
    BEGIN
       update fa_fas_detail
         set fas_depretotal=fas_deprebefore+
    (select nvl(sum(fsd_amount),0) from fa_fas_depre
               where fsd_fasid=fas_id)
    ;
    commit;
    end;
    /
    错误:
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    6/2      PLS-00103: 出现符号 "SELECT"在需要下列之一时:
             (-+modnotnullothers
             <an identifier><a double-quoted delimited-identifier>
             <a bind variable>avgcountcurrentexistsmaxminpriorsqlstddev
             sumvarianceexecuteforalltimetimestampintervaldate
             <a string literal with character set specification>
             <a number><a single-quoted SQL string>9/1      PLS-00103: 出现符号 "COMMIT"
      

  5.   

    select ... into variable_name
      

  6.   

    在SQLPLUS中能用的语法并不一定在PL/SQL中都支持,通常,PL/SQL支持的SQL版本要低于SQLPLUS,所以在PL/SQL块中,尽量用ORACLE的传统语法.这么做的好处还在于更容易保持软件在不同ORACLE版本中的兼容性.CREATE OR REPLACE PROCEDURE updbatch (p_date IN CHAR)
    AS
    BEGIN
       UPDATE fa_fas_detail x
          SET fas_depretotal = (SELECT x.fa_fas_detail + SUM (fsd_amount)
                                  FROM fa_fas_depre
                                 WHERE fsd_fasid = fas_id);   COMMIT;
    END;
      

  7.   

    问题已解决,弱水三千的是对的。可是为什么要把fa_fas_detail放到select里呢?
    解决了这个问题,就结分
      

  8.   

    UPDATE的语法是:
    UPDATE TABLE_NAME
       SET (COL1,COL2,COL3)= (SUBQUERY..)
     WHERE ...;ORACLE传统语法中不能用SUBQUERY代替一个列,比如在SQL SERVER中可以这么写:
    SELECT COL1, (SELECT COL2 FROM TABLE2 WHERE ....) COLX
      FROM TABLE1
     WHERE ...;
    ORACLE8I以后的版本支持在SQLPLUS中执行这样的查询,但是PL/SQL中是不支持的,传统的写法应该是:
    SELECT COL1, COL2 COLX
      FROM TABLE1, TABLE2
     WHERE ....;