oracle使用object,table輸出集合

2021-07-22 10:22:52 字數 2109 閱讀 3850

其中tt1是表1,tt2是表2

定義mo_id ,name ,v_name ...字元長度時,是實際表中的字段定義長度

//建立型別

create or replace type myscalartype

as object (mo_id varchar2(100),name varchar2(100))

create or replace type mytabletype as table of myscalartype

//分割字元

create or replace procedure split_string_sp(p_instr in varchar2,--傳入字串,逗號分隔,輸入引數

p_strs  out varchar2,--擷取第1個值之後剩下的字串,輸出引數

p_curr  out varchar2, --擷取到的第1個值,輸出引數

p_char  in  varchar2 --以什麼字元為分隔字元

) is

curr_loca number;

begin

curr_loca := instr(p_instr, p_char, 1, 1);

p_curr    := substr(p_instr, 0, curr_loca - 1);

if p_curr is null then

p_curr := p_instr;

p_strs := null;

else

p_strs := substr(p_instr, curr_loca + 1);

end if;

end;

//建立函式

create or replace function getallex return mytabletype pipelined

astype c1 is ref cursor;

cur_name     c1;

cur_my     c1;

v_mo_id varchar2(100);

v_fail_acc_unit varchar2(50);

v_new_fail_acc_unit varchar2(50);

v_name varchar2(100);

v_return varchar2(10);

v_current varchar2(10);

begin

open cur_my for 'select mo_id, fail_acc_unit from tt1';

loop

fetch cur_my into v_mo_id,v_fail_acc_unit;

exit when cur_my%notfound;

--迴圈aa;bb;cc欄位

while v_fail_acc_unit is not null

loop

--exit when v_fail_acc_unit is null;

split_string_sp(v_fail_acc_unit, v_return, v_current, ';');

--查詢name

open cur_name for 'select name from tt2 where party_id = ''' || v_current || '''';

loop

fetch cur_name into v_name;

exit when cur_name%notfound;

end loop;

close cur_name;

pipe row(myscalartype(v_mo_id,v_name));

v_fail_acc_unit := v_return;

end loop;

dbms_output.put_line(v_mo_id);

dbms_output.put_line(v_new_fail_acc_unit);

v_new_fail_acc_unit := null;

end loop;

close cur_my;

return;

end;

//c++呼叫

select * from table(getallex())

Object T(以下代指泛型) 的區別

我們先來試著理解一下object類,學習j a的應該都知道object是所有類的父類,注意 那麼這就意味著它的範圍非常廣!首先記住這點,如果你的引數型別時object,那麼的引數型別將非常廣!thinking in j a 中說很多原因促成了泛型的出現,最引人注目的乙個原因就是為了創造容器類。這個要...

oracle 游標使用

create or replace function errortyperead return varchar2 is result varchar2 3000 type cursor type is ref cursor tempname varchar2 100 cursor testcur i...

oracle使用小結

1.儲存過程出錯 pls 00103 出現符號 在需要下列之一時 create or replace procedure udf sp tlog add in l id number,in l type number,in b id number,in l desc varchar2 200 in ...