存储过程的的简单问题,在线等待!
我的数据库中有两个表,table a(cid,cz,ch .....) ,table b(gdm,cid,xtsj,bzw......).我的最终结果是从a中提取cid,cz,ch,在b中提取gdm,cid,xtsj,bzw.两表的数值是以cid 关联。请注意两表中有很多行,要在存储过程中用到游标。请问此存储过程如何写?
答对即给分。
谢谢!
问题点数:50、回复次数:7Top
1 楼zsfww1205(努力学习oracle)回复于 2005-06-02 15:56:15 得分 0
感觉需求不是很明确。。。
你可以这样:
定义两个游标,在第一个游标里面对第二个进行循环调用,如果cid相等就把数据输出来Top
2 楼sybase125(c++)回复于 2005-06-02 16:05:57 得分 0
请再具体讲一下.Top
3 楼zsfww1205(努力学习oracle)回复于 2005-06-02 16:14:29 得分 50
试试这个过程(没测试。。)
create or replace procedure zsf0602 is
cursor o_cursor1 is select distinct cid,cz,ch from a order by cid
cursor o_cursor2 is select gdm,cid,xtsj,bzw from b order by cid
tmpcida a.cid%type;
tmpcz cz%type;
tmpch ch%type;
tmpcidb b.cid%type;
tmpgdm gdm%type;
tmpxtsj xtsj%type;
tmpbzw bzw%type;
begin
open o_cursor1;
fetch o_cursor1 into tmpcida,tmpcz,tmpch ;
loop
exit when not o_cursor1%found
open o_cursor2;
fetch o_cursor2 into tmpcidb,tmpgdm,tmpxtsj,tmpbzw;
loop
exit when not o_cursor2%found
if tmpcida == tmpcidb then
dbms_output.put_line
(tmpcida||', '||tmpcz||', '||tmpch||', '||tmpgdm||', '||tmpxtsj||', '||tmpbzw)
end if;
fetch o_cursor2 into tmpcidb,tmpgdm,tmpxtsj,tmpbzw;
end loop
close o_cursor2;
fetch o_cursor1 into tmpcida,tmpcz,tmpch ;
end loop
close o_cursor1;
commit;
end zsf0602;
Top
4 楼zsfww1205(努力学习oracle)回复于 2005-06-02 16:16:21 得分 0
if tmpcida == tmpcidb then
dbms_output.put_line(tmpcida||', '||tmpcz||', '||tmpch||', '||tmpgdm||', '||tmpxtsj||', '||tmpbzw)
end if;
参数太长。。。嘿嘿。。
Top
5 楼Honeymaster(过街老鼠)回复于 2005-06-02 16:55:42 得分 0
按你的意思好像很简单啊.呵呵...因为你说的什么,我看了N遍不知道所云!Top
6 楼sybase125(c++)回复于 2005-06-03 13:32:58 得分 0
aSDASDTop
7 楼sybase125(c++)回复于 2005-06-03 13:41:13 得分 0
请大家给出指点;下面的过程有啥问题!
CREATE OR REPLACE procedure zh_zyx(
kssj in varchar2,
sjsj in varchar2,
gdmhzm in varchar2,
gdm out varchar2,
cz out varchar2,
ch out varchar2,
drsj out varchar2,
dcsj out varchar2)
as
v_cidgdsy varchar2(16);
v_cidclk varchar2(16);
v_zyxgdm varchar2(8);
v_gdm varchar2(6);
v_xtsj varchar2(28);
v_bzw varchar2(4);
v_cz varchar2(10);
v_ch varchar2(10);
cursor gdsy_cur is
select gdm,cid,xtsj,bzw from yz.zh_gdsy,yz_zh_clk
where xtsj>=kssj and xtsj<=sjsj and gdm=(select gdm from zh_jnzzyx where zyxhzm=gdmhzm);
cursor clk_cur is
select cid,cz,ch from yz.zh_clk where cid=v_cidgdsy;
begin
open gdsy_cur;
fetch gdsy_cur into v_gdm,v_cidgdsy,v_xtsj,v_bzw;
loop
exit when not gdsy_cur%found
open clk_cur;
fetch clk_cur into v_cidclk,v_cz,v_ch;
loop
exit when not clk_cur%found
if v_cidgdsy = v_cidclk then
dbms_output.put_line
(v_cidgdsy||','||v_cz||','||v_ch||','||v_gdm||','||v_xtsj||','||v_bzw)
end if;
fetch clk_cur into v_cidclk,v_cz,v_ch;
end loop
close clk_cur;
fetch gdsy_cur into v_gdm,v_cidgdsy,v_xtsj,v_bzw;
end loop
close gdsy_cur;
commit;
end zh_zyx;
Top




