怎麼使用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
;
.


注,以上只是實際的例子,具體的使用還要視情況而定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章