PROCEDURE SELECT_DENSITY(P_CAMERAID IN VARCHAR2, P_DENSITY OUT NUMBER) IS
  BEGIN
    SELECT T.DENSITY
      INTO P_DENSITY
      FROM TB_DENSITY T
     WHERE T.TIMEAT =
           (SELECT MAX(TT.TIMEAT)
              FROM TB_DENSITY TT
             WHERE TT.CAMERAID = DECODE(TRIM(P_CAMERAID),
                                        NULL,
                                        TT.CAMERAID,
                                        TRIM(P_CAMERAID)));
  END SELECT_DENSITY;
这是我的存储过程。我的tb_density表里的数据是这样的,有cameraid字段,还有一个timeat,我现在存进了两个数据,一个是cameraid=00002081,timeat=2012-3-23 8:37:38,还有一个是cameraid=00002082,timeat=2012-3-23 8:37:38。但是我用以上的存储过程去查询会出现错误。就是这个错误ORA-01422: 实际返回的行数超出请求的行数。我试过网上的方法,加了一句话,就是rownum=1.这样是不会报错,但是我这样就失去了意义。因为这样我就查不到cameraid=00002082这条数据了。请大家帮忙。

解决方案 »

  1.   

    把建表的SQL语句贴一下,要不然没办法测试。
      

  2.   

     WHERE TT.CAMERAID = DECODE(TRIM(P_CAMERAID),
      NULL,
      TT.CAMERAID,
      TRIM(P_CAMERAID) DECODE(TRIM(P_CAMERAID),
      NULL,
      TT.CAMERAID,
      TRIM(P_CAMERAID)------
    直接改成 
     WHERE TT.CAMERAID =TRIM(P_CAMERAID)
      

  3.   

    返回行数超出1行数据时,不能使用select into命令。
    只能用游标检索,然后一行一行处理。
      

  4.   

    SELECT T.DENSITY   ----会产生多行数据,可以用游标,临时表等来处理
      INTO P_DENSITY