我正在建立一个程序,根据他/她的旧记录重新填充员工的新记录。
只是一个示例概念:x_table
包含员工记录。记录ID
1是初始记录,2是他的新记录。
create x_table
(
id number,
value varchar2(100)
);
insert into x_table (id, value ) values (1, 'One');
insert into x_table (id, value ) values (2, 'Two');
commit;
示例虚拟打包程序this_is_a_pkg.do_something
更新了她的记录。
在性能方面,这是重用Explicit游标x_cur
(下方)的最佳方法吗?
使用相同的显式游标但多个类型声明
declare
cursor x_cur (p_id number) is
select *
from x_table;
type x_type is table of x_cur%rowtype index by pls_integer;
x_rec x_type;
x_rec2 x_type;
begin
open x_cur(1);
fetch x_cur
bulk collect
into x_rec;
close x_cur;
open x_cur(2);
fetch x_cur
bulk collect
into x_rec2;
close x_cur;
for i in 1..x_rec2 loop -- outer loop because this is the new record
for x in 1..x_rec loop -- outer loop because this is the old record
this_is_a_pkg.do_something(p_new_id => x_rec2(i).id
p_old_value => x_rec(x).value)
end loop;
end loop;
end;
使用不同的显式游标和多种类型声明
declare
cursor x_cur (p_id number) is
select *
from x_table;
cursor x_cur2 (p_id number) is
select *
from x_table;
type x_type is table of x_cur%rowtype index by pls_integer;
x_rec x_type;
x_rec2 x_cur2;
begin
open x_cur(1);
fetch x_cur
into x_rec;
close x_cur;
open x_cur(2);
fetch x_cur
into x_rec2;
close x_cur;
for i in 1..x_rec2 loop -- outer loop because this is the new record
for x in 1..x_rec loop -- outer loop because this is the old record
this_is_a_pkg.do_something(p_new_id => x_rec2(i).id
p_old_value => x_rec(x).value)
end loop;
end loop;
end;
思想?
答案 0 :(得分:1)
您正在尝试执行游标overloading
,这将节省内存空间,使代码保持一致并提高可读性。由于使用NO
,性能提升Overloading
。
"重载过程"源于面向对象编码的世界,具有多态性的概念。我们认为可以根据输入数据类型更改PL/SQL
存储过程或函数的功能。
根据Tom,重载的唯一好处是"易用性"。