ORACLE 实际返回的行数超出请求的行数

这是我创建的过程:createorreplaceproceduretest(p_idinwf_countries.region_id%type,p_elevationin... 这是我创建的过程:
create or replace procedure test
(p_id in wf_countries.region_id%type,
p_elevation in wf_countries.HIGHEST_ELEVATION%type,
p_name out wf_countries.country_name%type) is
begin
select country_name into p_name
from wf_countries
where region_id = p_id
and HIGHEST_ELEVATION > p_elevation;
end test;
这是我创建的调用上面过程的代码:
declare
a_name wf_countries.country_name%type;
begin
test(5,2000,a_name);
DBMS_OUTPUT.PUT_LINE(a_name);
end;

但运行调用的时候,提示“ORA-01422: 实际返回的行数超出请求的行数"这个错误。有高手帮我修改下吗?谢谢了!
展开
 我来答
shaokun29
2011-03-06
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
原因:
用where region_id = p_id and HIGHEST_ELEVATION > p_elevation这个条件查询返回的记录肯定不止一行,也就是说有多个country_name满足条件。
改正方法:
select top 1 country_name into p_name……
或者 …where region_id = p_id and HIGHEST_ELEVATION > p_elevation and rownum = 1
加上top 1 或rownum=1 限制只取查询结果的第一行,这样赋值就是唯一的了。
追问
我知道。但我就是想要返回多行记录。那这样的话该怎么改呢?
追答
那就只能用oracle pl/sql游标了,但是只能一条一条的处理,不要加函数传出值了。
给你个参考:
create or replace procedure test
(p_id in wf_countries.region_id%type,
p_elevation in wf_countries.HIGHEST_ELEVATION%type) is
declare
cursor my_cursor is
select country_name from wf_countries where region_id = p_id and HIGHEST_ELEVATION > p_elevation;
p_name wf_countries.country_name%type;
begin
open my_cursor;
loop
fetch my_cursor into p_name;
exit when my_cursor%not found;
DBMS_OUTPUT.PUT_LINE(p_name);
end loop;
close my_cursor;
end;

再直接调用 test(5,2000)就行。
我没调试不知道能不能跑通,你最好看看oracle游标这方面的介绍,再自己动手做做,祝顺利!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式