create or replace
Procedure PRO_Get_NowData
(
      P_FCID VARCHAR2,
      o_cur out sys_refcursor
)
AS
     V_Command varchar2(2000);
BEGIN
    V_Command:=
     'SELECT * FROM (select sum(ACTIVEPOWER) AS ACTIVEPOWER,avg(WindSpeed) AS WindSpeed,avg(Temperature) AS Temperature,avg(WindDirection) AS WindDirection from TB_'
      ||P_FCID||'_FJ_'||substr(sysdate,1,4 )||
      ' where RECORDTIME in(select RECORDTIME from TB_'
      ||P_FCID||'_FJ_'||substr(sysdate,1,4 )||
      ' group by RECORDTIME having count(*)>0 ) group by RECORDTIME ORDER By RECORDTIME DESC) Where ROWNUM = 1'; 
      OPEN o_cur FOR v_command;
     
 
END PRO_Get_NowData;
在sqldeveloper中编写的存储过程,jsp调用时提示缺少右括号,怎么调试都找不到错误。

解决方案 »

  1.   

    substr(sysdate,1,4 )这里也用引号括起来,因为他不是变量。。
      

  2.   

    RECORDTIME in(select 
    -----加个空格看看。
    RECORDTIME in (select 
      

  3.   

    jsp代码肯定没有错误,之前调用别的存储过程都没问题
      

  4.   

    substr(sysdate,1,4)不报错吗?
    syadate是日期类型啊。substr需要的是字符类型呀,你的存储过程编译通过了没有呢?
      

  5.   

    可以这样写的,应该是有一个隐形转换,不过楼主最好是加上to_char(sysdate, 'yyyy-mm-dd')控制一下,
    SQL> select substr(sysdate,1,4) from dual;SUBSTR(SYSDATE,1,4)
    -------------------
    19-1
      

  6.   

    神啊~~~真的是这样~~谢谢两位了    
    (substr(to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),1,4 ))
      

  7.   

    SELECT * FROM 
         (select sum(ACTIVEPOWER) AS ACTIVEPOWER,
                 avg(WindSpeed) AS WindSpeed,
                 avg(Temperature) AS Temperature,
                 avg(WindDirection) AS WindDirection 
            from TB_P_FCID_FJ_2010
            where RECORDTIME in 
                 (select RECORDTIME from TB_P_FCID_FJ_2010 group by RECORDTIME having count(*)>0) 
            group by RECORDTIME ---这里分了组,但是你的选择列中没有这个列啊。你在plsql下执行成功?
            ORDER By RECORDTIME DESC
         ) Where ROWNUM = 1
    -------你的语句有问题啊。。