ORA-01422: exact fetch returns more than requested number of rows

Cause: The number specified in exact fetch is less than the rows returned.

Action: Rewrite the query or change number of rows requested

[@more@]

刚才遇见了这个错误,原来是我多写了一个隐式cursor

如果写select into 很容易犯错误同时又不知道

参考:

SELECT select_list
INTO variable_name | record_name
FROM table
WHERE condition;
例:
SQL> r
1 declare
2 v_deptno number(2);
3 v_loc varchar2(15);
4 begin
5 select deptno,loc
6 into v_deptno,v_loc
7 from dept
8 where dname='SALES';
9 DBMS_OUTPUT.PUT_LINE (V_deptno ||' and '||v_loc);
10* end;
30 and CHICAGO
选取字段与变量个数和类型要一致。声明的变量一定要在SIZE上大于返回的赋值,否则提示缓冲区溢出。
如果SELECT语句没有返回值:ORA-01403: 未找到数据
ORA-06512: 在line 5
如果有多个值返回:ORA-01422: 实际返回的行数超出请求的行数
这些我们到了错误处理时会逐一讲解。
例:
上面的例子可以改为:
declare
v_deptno dept.deptno%type;
v_loc dept.loc%type;
begin
select deptno,loc
into v_deptno,v_loc
from dept
where dname='SALES';
DBMS_OUTPUT.PUT_LINE (V_deptno ||' and '||v_loc);
end;
/
这样,可以在未知其他字段大小和类型的时候定义变量,提高兼容性。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/226700/viewspace-862093/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/226700/viewspace-862093/

你可能感兴趣的:(ORA-01422: exact fetch returns more than requested number of rows)