表A:a1,a2,a3,a4,a5,a6 (字段)
表B:a1,a2,a3,b1,b2,b3,a5
表C:a1,a2,a3,a4,b3
其中a1,a2,a3在3张表中都是主键。现在合并A,B表到C表中去。
create or replace procedure hb_table(tj A.a1%type)
is
declare
--
--声明--
--va1
--va2
cursor cur_hb is
select a.a1,a.a2,a.a3,a.a4,b.b3 from A a,B,b where a5 = '333' and a.a5 = b.a5;
begin
open v_zj;
loop
fetch v_zj into va1,va2,va3,va4,vb3;
exit when v_zj%notfound;
if v_zj%found then
insert into C values(va1,va2,va3,va4,vb3);
end if;
end loop;
close v_zj;
commit;
end;(存储过程)
A和B表数据很多,执行时间很长,请教一下怎么提高执行效率,cursor那个游标写法怎么去优化?谢谢各位啦。
表B:a1,a2,a3,b1,b2,b3,a5
表C:a1,a2,a3,a4,b3
其中a1,a2,a3在3张表中都是主键。现在合并A,B表到C表中去。
create or replace procedure hb_table(tj A.a1%type)
is
declare
--
--声明--
--va1
--va2
cursor cur_hb is
select a.a1,a.a2,a.a3,a.a4,b.b3 from A a,B,b where a5 = '333' and a.a5 = b.a5;
begin
open v_zj;
loop
fetch v_zj into va1,va2,va3,va4,vb3;
exit when v_zj%notfound;
if v_zj%found then
insert into C values(va1,va2,va3,va4,vb3);
end if;
end loop;
close v_zj;
commit;
end;(存储过程)
A和B表数据很多,执行时间很长,请教一下怎么提高执行效率,cursor那个游标写法怎么去优化?谢谢各位啦。
解决方案 »
- ERROR:ORA-12705: 无法访问 NLS 数据文件, 或者指定的环境无效
- 求一条 Sql 语句 Oracle 大家帮帮忙吧,Oracle 数据库查询实在不精通啊 。
- Excel 如何把 statspack 生成的采样报告以报表的形式呈现
- 请大家来看看这两语句效率为什么差那么多?
- 如何知道表的创建时间??
- 什么是数据字典 数据字典有什么用途
- 能不能提供一些oracle中关于dual对象的资料,我觉得他不好理解!!!谢谢,在线......
- 如何获取上一个月是几月
- 急-----------使用BCB连接ORACLE的问题!
- 我不小心把default profile改了,结果就有了口令使用的限制时间。我发现system用户只有十天的时间了,怎么去掉?
- sqlplus,输出报表中打印的列标题后几个字段名字被截断
- 一个表创建索引要注意哪些啊
is --
--声明--
--va1
--va2
cursor cur_hb is
select a.a1,a.a2,a.a3,a.a4,b.b3 from A a,B,b where a5 = '333' and a.a5 = b.a5; type t_a1 is table of a.a1%type index by binary_integer;
va1 t_a1;-- same for va2,va3,va4,vb3
...begin
open v_zj;
loop
fetch v_zj bulk collect into va1,va2,va3,va4,vb3
limit 1000;
forall i in va1.first..va1.last
insert into C values(va1(i),va2(i),va3(i),va4(i),vb3(i));
exit when v_zj%notfound;
end loop;
close v_zj;
commit;
end;
select a.a1,a.a2,a.a3,a.a4,b.b3 from A a,B,b where a5 = '333' and a.a5 = b.a5;
create or replace procedure hb_table(tj A.a1%type)
is
begin
for l_record in (select a.a1,a.a2,a.a3,a.a4,b.b3 from A a,B,b where a5 = '333' and a.a5 = b.a5)
loop
insert into C values l_record;
end loop;
commit;
end;