关于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命令。
只能用游标检索,然后一行一行处理。