管道函数提高系统性能

管道函数提高系统性能

从emp表中读取,修改工资和雇用日期,把修改过的数据装入emp2.emp表数据量很大,约千万条。

create table emp2 as
select empno,ename,hiredate,sal,deptno
from emp
where rownum=0;

create or replace
type emp2rec is object (
    empno number(10),
    ename varchar2(20),
    hiredate date,
    sal number(10,2),
    deptno number(6));
/

create or replace
type emp2list as table of emp2rec;
/

create or replace
package pkg2 is
    function consumer return sys_refcursor;
    function manipulator(src_rows sys_refcursor) return emp2list pipelined;
    procedure producer;
end;
/

create or replace
package body pkg2 is

function consumer return sys_refcursor is
    src_rows sys-refcursor;
begin
    open src_rows for
        select empno,ename,hiredate,sal,deptno
        from emp;
    return src_rows;
end;

function mainpulator(src_rows sys_refcursor)
        return emp2list pipelined is
    r emp2rec;
    e emp2rowtype;
begin
    loop
        fetch src_rows bulk collect into e limit 100;
        for i in 1..e.count loop
            e(i).sal:=e(i).sal+10;
            e(i).hiredate:=e(i).hiredate+1;
            pipe row (emp2rec(e(i).empno,e(i).ename,e(i).hiredate,e(i).sal,e(i).deptno));
        end loop;
        exit when src_rows%notfound;
    end loop;
    close src_rows;
    return;
end;

procedure producer is
    rc sys_sys_refcursor:=consumer;
begin
    insert into emp2
    select * from table(cast(manipulator(rc) as emp2list));
end;

end;
/

exec pkg2.producer;

可以直接省掉consumer和producer过程,使用标准sql:
insert into emp2
select * from table(
              cast(
              pkg2.manipulator(
               cursor(select empno,ename,hiredate,sal,deptno from emp))
              as emp2list));


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值