如何通过调用存储过程返回结果集?(ORACLE)
1,是不是一定要使用游标变量?
2,大侠能不能写个例子?
3,这么做的效率如何?
问题点数:20、回复次数:7Top
1 楼sky_blue(蓝天2007)回复于 2001-12-12 11:40:03 得分 0
目的是将某几张表的内容经过一些处理后返回给客户端数据集.Top
2 楼panther_totem(青争岁月)回复于 2001-12-12 12:50:59 得分 5
应该是要用到游标了,不过你可以试试看可不可以用视图来解决你的问题,主要是看你的处理是不是很复杂,太复杂的处理试图是作不到了。
存储过程好象不能直接返回一个结果集哦,要通过把处理后的数据放在一个表里然后在客户端查询那个表来得到结果。
游标的效率是比较低了。
Top
3 楼jimsuker(Fish)回复于 2001-12-12 19:35:26 得分 5
可以把数据放到临时表里
CREATE OR REPLACE PROCEDURE p1(
p_date in varchar2 ) as
cursor my_cursor is select a1,a2 from a;
my_row_type my_cursor%rowtype;
begin
open my_cursor ;
loop
fetch my_cursor into my_row_type;
insert into t(t1,t2) values (my_row_type.a1,my_row_type.a2);
exit when my_cursor not%found;
end loop;
close my_cursor ;
end;
表a的定义
create table a
(a1 varchar2(10),a2 varvhar2(10));
表t的定义
create globle temporary table t
(t1 varchar2(10),t2 varvhar2(10));Top
4 楼Rewiah(乘长风)回复于 2001-12-12 21:20:59 得分 0
学习Top
5 楼jimsuker(Fish)回复于 2001-12-13 08:57:27 得分 5
请把exit when my_cursor not%found;
放到 insert的前面
效率还可以,就看你怎么写。
其实,很多语句都用到了游标,只不过是隐式游标,比如
update a set a1 = 'b';
如下可以看到执行了几行:
i := sql%rowcount;Top
6 楼fengwd(无情剑客多情剑)回复于 2001-12-13 10:31:21 得分 5
我也想知道.Top
7 楼sky_blue(蓝天2007)回复于 2001-12-13 10:56:04 得分 0
能不能分批给分?Top




