在PL / SQL中重用光标的最佳实践

时间:2017-03-26 11:09:48

标签: sql oracle plsql

我正在建立一个程序,根据他/她的旧记录重新填充员工的新记录。 只是一个示例概念: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;

思想?

1 个答案:

答案 0 :(得分:1)

您正在尝试执行游标overloading,这将节省内存空间,使代码保持一致并提高可读性。由于使用NO,性能提升Overloading

"重载过程"源于面向对象编码的世界,具有多态性的概念。我们认为可以根据输入数据类型更改PL/SQL存储过程或函数的功能。

根据Tom,重载的唯一好处是"易用性"。