Function Get_daorus(
ORDER_NO_ In Varchar2
)
Return varchar2
Is
temp varchar2(50);
Cursor get_attr_ Is
(select part_no from ifsapp.DOP_ORDER_ORD_BY_ID where part_no like '401%' and dop_id in
(select DOP_ID from ifsapp.DOP_ORDER_ORD_BY_ID where CONFIGURATION_ID in (select CONFIGURATION_ID from customer_order_line
where order_no=ORDER_NO_ AND line_no||rel_no||line_item_no not in (select line_no||rel_no||line_item_no
from DOP_DEMAND_CUST_ORD where ORDER_NO=ORDER_NO_))));
Begin
Open get_attr_;
Fetch get_attr_ Into temp;
Close get_attr_;
Return temp;
End Get_daorus;
这是本人写的包里面的一个简单函数据的一个游标,游标里的select语句查询到的part_no有很多行的数据,但这个游标出来的效果只是一行数据,是
part_no
A1001BC101
而本人想要的是全部行的数据
part_no
A1001BC101
A1001BC102
A1001BC103
A1001BC104
A1001BC105
.
.
.
请教各位如何修改这个游标,以达到多行输出的效果
ORDER_NO_ In Varchar2
)
Return varchar2
Is
temp varchar2(50);
Cursor get_attr_ Is
(select part_no from ifsapp.DOP_ORDER_ORD_BY_ID where part_no like '401%' and dop_id in
(select DOP_ID from ifsapp.DOP_ORDER_ORD_BY_ID where CONFIGURATION_ID in (select CONFIGURATION_ID from customer_order_line
where order_no=ORDER_NO_ AND line_no||rel_no||line_item_no not in (select line_no||rel_no||line_item_no
from DOP_DEMAND_CUST_ORD where ORDER_NO=ORDER_NO_))));
Begin
Open get_attr_;
Fetch get_attr_ Into temp;
Close get_attr_;
Return temp;
End Get_daorus;
这是本人写的包里面的一个简单函数据的一个游标,游标里的select语句查询到的part_no有很多行的数据,但这个游标出来的效果只是一行数据,是
part_no
A1001BC101
而本人想要的是全部行的数据
part_no
A1001BC101
A1001BC102
A1001BC103
A1001BC104
A1001BC105
.
.
.
请教各位如何修改这个游标,以达到多行输出的效果
(select part_no from ifsapp.DOP_ORDER_ORD_BY_ID where part_no like '401%' and dop_id in
(select DOP_ID from ifsapp.DOP_ORDER_ORD_BY_ID where CONFIGURATION_ID in (select CONFIGURATION_ID from customer_order_line
where order_no=ORDER_NO_ AND line_no||rel_no||line_item_no not in (select line_no||rel_no||line_item_no
from DOP_DEMAND_CUST_ORD where ORDER_NO=ORDER_NO_))));
请哪位高手帮我优化一下
For cur_ IN get_attr LOOP
temp := cur.part_no;
...
...
end loop;
我理解你要问的是:
select的时候出来的结果集包含多条记录,
你现在只取了其中一条,而你要的是所有的记录,对吗?我也初学Oracle,不知道是不是这样,说的不对的,还请谅解!我说一下我的看法:在begin里面应该先初始化cursor...
begin
if get_attr_%isopen then
close get_attr_;
end if;
open get_attr_; -- 循环取出多条记录
loop
fetch get_attr_ into temp;
if get_attr_%notfound then
exit;
end loop;
-- 这里可以处理取出的这条记录
end loop;
end;
begin
if get_attr_%isopen then
close get_attr_;
end if;
open get_attr_; -- 循环取出多条记录
loop
fetch get_attr_ into temp;
if get_attr_%notfound then
exit;
end if;
-- 这里可以处理取出的这条记录
end loop;
end;那里是end if
begin
if get_attr_%isopen then
close get_attr_;
end if;
open get_attr_; -- 循环取出多条记录
loop
fetch get_attr_ into temp;
if get_attr_%notfound then
exit;
end if;
-- 这里可以处理取出的这条记录
end loop;
end;那里是end if
你的程序里只执行了一次fetch当然只能取出一条记录,
假如你的游标有5条记录,fetch5次的话就会把所有记录都取出类,
但实际应用中连写5次fetch当然很麻烦,所用一般都与一些循环的语法一起使用,
用cursor%notfound判断游标是否到结果集末尾。