怎麼使用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;
.
注,以上只是實際的例子,具體的使用還要視情況而定