日期:2014-05-17  浏览次数:21705 次

关于Oracle的问题==ORA-01422: 实际返回的行数超出请求的行数
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这条数据了。请大家帮忙。

------解决方案--------------------
只贴这个存储过程中用到的表即可。
------解决方案--------------------
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)
------解决方案--------------------
返回行数超出1行数据时,不能使用select into命令。
只能用游标检索,然后一行一行处理。