存储过程类型数据窗口调用ORACLE8.1中存储过程返回的记录集(加100分)
怎样用PB6.5存储过程类型数据窗口调用ORACLE8.1中存储过程返回的记录集(多变量多行多字段)
例:
orcale:
create or replace procedure examp_proc(aa number,bb out varchar2) is
s_id varchar2(10);
s_class varchar2(10);
s_name varchar2(10);
s_dept varchar2(10);
s_report varchar2(10);
begin
/*select emp_id,emp_class,emp_name,emp_dept,emp_report from emp where emp_class=aa;*/
--如何取得记录集,有没有什么比较好的办法.最好都说一下.
end
-- 特别急.
问题点数:100、回复次数:6Top
1 楼diliver(木头人)回复于 2002-09-21 14:11:33 得分 100
你可建一表。
把结果集insert到表里面。
Top
2 楼johnzhuking(john)回复于 2002-09-21 14:17:42 得分 0
我建视图不更好?可我是多用户网络实时查询,数据量贼大,数据实时写入更新,多表综合.我要的就是查询速度快.Top
3 楼diliver(木头人)回复于 2002-09-21 14:19:03 得分 0
oracle好象不支持记录集的返回做法。
1、你可以见一个表:aa
存储过程:
'''''''''''
''''''''''
insert into aa;
select emp_id,emp_class,emp_name,emp_dept,emp_report from emp where emp_class=aa;
'''''''''''''''''
'''''''''''''''''''
2、在前台做一aa表的数据窗口。
统计之时执行存储过程。 retrieve数据窗口就可以得到结果集了。
不妨试试
Top
4 楼diliver(木头人)回复于 2002-09-21 14:23:52 得分 0
那只有在查询速度方面下工夫了。
在emp_class上建一个索引吧。
Top
5 楼jlandzpa(jlandzpa)回复于 2002-09-21 22:02:22 得分 0
search : ref cursorTop
6 楼johnzhuking(john)回复于 2002-09-22 22:34:56 得分 0
select *
from the ( select cast( testrerecordnotabname(1) as zmytableType )
from dual ) a;
比
select * from a;
数据量大的时候速度要慢很多
--------------------------------------------------
create or replace type myqueryType as object
(
line_nbr varchar2(20),
pri_line_nbr varchar2(20),
vn_id varchar2(20),
vn_nbr varchar2(20),
acc_exch_id varchar2(20),
security_password varchar2(20),
serv_cat_id varchar2(20),
so_nbr varchar2(20),
bill_type_id varchar2(20),
cust_id varchar2(20),
addr_id varchar2(20),
agent_id varchar2(20),
sts varchar2(20)
)
/
create or replace type myTableType as table of myqueryType
/
create or replace function demo_proc( serv_id_query in varchar2,
p_end_row in number )
return myTableType
as
l_data myTableType := myTableType();
l_cnt number default 0;
begin
for v in ( select distinct h_serv_acc_nbr.line_nbr line_nbr,h_serv_acc_nbr.pri_line_nbr pri_line_nbr,
h_serv_acc_nbr.vn_id vn_id,h_serv_acc_nbr.vn_nbr vn_nbr,
h_serv_acc_nbr.acc_exch_id acc_exch_id,
h_serv_acc_nbr.SECURITY_PASSWD security_password,
h_serv_acc_nbr.serv_cat_id serv_cat_id,
h_serv_acc_nbr.so_nbr so_nbr,
h_serv.bill_type_id bill_type_id,
h_serv_cust.cust_id cust_id,
h_serv_addr.addr_id addr_id,
h_serv_agent.agent_id agent_id,
h_serv.sts sts
from h_serv,h_serv_acc_nbr,h_serv_cust,h_serv_agent,h_serv_addr
where h_serv.serv_id = h_serv_acc_nbr.serv_id and
h_serv.serv_id = h_serv_cust.serv_id and
h_serv.serv_id = h_serv_agent.serv_id and
h_serv.serv_id = h_serv_addr.serv_id and
h_serv.serv_id = serv_id_query and
h_serv.seq = h_serv_acc_nbr.seq and
h_serv.seq = h_serv_cust.seq and
h_serv.seq = h_serv_agent.seq and
h_serv.seq = h_serv_addr.seq )
loop
l_cnt := l_cnt + 1;
if ( l_cnt >= 1 )
then
l_data.extend;
l_data(l_data.count) :=
myqueryType( v.line_nbr,
v.pri_line_nbr ,
v.vn_id ,
v.vn_nbr ,
v.acc_exch_id ,
v.security_password ,
v.serv_cat_id ,
v.so_nbr ,
v.bill_type_id ,
v.cust_id ,
v.addr_id ,
v.agent_id ,
v.sts );
end if;
exit when l_cnt =p_end_row;
--exit when l_cnt =l_data.count;
end loop;
return l_data;
end;
/
/
select v.line_nbr,
v.pri_line_nbr ,
v.vn_id ,
v.vn_nbr ,
v.acc_exch_id ,
v.security_password ,
v.serv_cat_id ,
v.so_nbr ,
v.bill_type_id ,
v.cust_id ,
v.addr_id ,
v.agent_id ,
v.sts
from the ( select cast( demo_proc(:serv_id_query,10000) as mytableType )
from dual ) V;
/
select distinct h_serv_acc_nbr.line_nbr line_nbr,h_serv_acc_nbr.pri_line_nbr pri_line_nbr,
h_serv_acc_nbr.vn_id vn_id,h_serv_acc_nbr.vn_nbr vn_nbr,
h_serv_acc_nbr.acc_exch_id acc_exch_id,
h_serv_acc_nbr.SECURITY_PASSWD security_password,
h_serv_acc_nbr.serv_cat_id serv_cat_id,
h_serv_acc_nbr.so_nbr so_nbr,
h_serv.bill_type_id bill_type_id,
h_serv_cust.cust_id cust_id,
h_serv_addr.addr_id addr_id,
h_serv_agent.agent_id agent_id,
h_serv.sts sts
from h_serv,h_serv_acc_nbr,h_serv_cust,h_serv_agent,h_serv_addr
where h_serv.serv_id = h_serv_acc_nbr.serv_id and
h_serv.serv_id = h_serv_cust.serv_id and
h_serv.serv_id = h_serv_agent.serv_id and
h_serv.serv_id = h_serv_addr.serv_id and
h_serv.serv_id = serv_id_query and
h_serv.seq = h_serv_acc_nbr.seq and
h_serv.seq = h_serv_cust.seq and
h_serv.seq = h_serv_agent.seq and
h_serv.seq = h_serv_addr.seq )
;
/
这样不快啊~~~~~~~~~~~~~~
我要快~快~快~快~快~~~~~~~~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~Top




