怎么使用object与record类型返回表类型数据

怎么使用object与record类型返回表类型数据

通过函数返回一个表类型的数据
先创建一个object的类型
 

代码:



create
or replace type varproperty IS object(
pid number
,
vid number
);
/
.


然后创建一个表类型对应到这个object

代码:



CREATE
OR REPLACE TYPE auc_property AS TABLE OF varproperty;
/
.


创建一个函数返回这个表类型

代码:



create
or replace function GET_PROPERTY(p_string in varchar2 )
  return
auc_property
as
v_str long default p_string || ';'
;
v_pid varchar2(100
);
v_vid varchar2(100
);
v_n number
;
v_m number
;
TYPE auc_property AS TABLE OF varproperty
;
v_data auc_property := auc_property
();
begin
  loop
    v_n
:= instr( v_str, ';'
);
    
v_m := instr( v_str, ':'
);
    exit
when (nvl(v_n,0) = 0
);
    
v_pid := ltrim(rtrim(substr(v_str,1,v_m-1
)));
    
v_vid := ltrim(rtrim(substr(v_str,v_m+1,v_n-v_m-1
)));
    
v_data.extend
;
    
v_data(v_data.count) := varproperty(v_pid,v_vid
);
      
v_str := substr(v_str, v_n+1
);
   
end loop
;
   return
v_data
;
end
;
/
.


通过游标返回一个表类型的数据

代码:



create
or replace procedure update_property is
--
variale
   m_aid varchar2
(32
);
--
type  
   type v_array is record
(
    
aid varchar2(32
),
    
astatus number
,
    
aproperty varchar2(4000
)
    );
   
type t_aucid is table of v_array
;
   
v_aucid t_aucid := t_aucid
();
--
cursor
cursor cur_pro is select id
,APPROVE_STATUS,
PROPERTY
   from auction_property_temp
    where PROPERTY is not null
;
--
start
begin
   open cur_pro
;
    
loop
      fetch cur_pro bulk collect into v_aucid limit 1000
;
      for
i in 1..v_aucid.
count loop
        m_aid
:= v_aucid(i).aid
;
        --
delete from auction_property
        delete from auction_property where auction_id
= m_aid
;
        --
insert into new
recode
        insert into auction_property
(auction_id,property_id,prop_vid,status
)
          
select m_aid,t.*,decode(v_aucid(i).astatus,-1,-1,0)
status
            from table
(get_property(v_aucid(i).aproperty)) t
;
      
end loop
;
      
commit
;
   exit
when cur_pro%notfound
;
   
end loop
;
   
commit
;
   
close cur_pro
;
end update_property
;
.


注,以上只是实际的例子,具体的使用还要视情况而定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值