--定义type
CREATE OR REPLACE TYPE "OBJ_CODE" IS OBJECT (
ID INT ,
CODE varchar2(50)
);
CREATE OR REPLACE TYPE "UDT_CODE" IS TABLE OF OBJ_CODE;
--创建过程
create or replace function FN_STR_TO_TBL(
code_str clob,
delimiter varchar2
)
return UDT_CODE
is
temp_str clob;
delimiter_pos number(10);
i number(10);
acode varchar2(50);
tb_code UDT_CODE:=UDT_CODE();
begin
temp_str := code_str;
delimiter_pos := instr(temp_str,delimiter);
i := 1;
while delimiter_pos>0 loop
acode := substr(temp_str,1, delimiter_pos-1);
temp_str := substr(temp_str,delimiter_pos+length(delimiter),length(temp_str));
tb_code.extend;
tb_code(tb_code.count):=obj_code(1,'');
tb_code(tb_code.count).id:=i;
tb_code(tb_code.count).code:=acode;
delimiter_pos := instr(temp_str,delimiter);
i := i+1;
end loop;
if temp_str is not null then
tb_code.extend;
tb_code(tb_code.count):=obj_code(1,'');
tb_code(tb_code.count).id:=i;
tb_code(tb_code.count).code:=temp_str;
end if;
return tb_code;
end FN_STR_TO_TBL;
--使用方法
select * from table(FN_STR_TO_TBL('111,222',','))
CREATE OR REPLACE TYPE "OBJ_CODE" IS OBJECT (
ID INT ,
CODE varchar2(50)
);
CREATE OR REPLACE TYPE "UDT_CODE" IS TABLE OF OBJ_CODE;
--创建过程
create or replace function FN_STR_TO_TBL(
code_str clob,
delimiter varchar2
)
return UDT_CODE
is
temp_str clob;
delimiter_pos number(10);
i number(10);
acode varchar2(50);
tb_code UDT_CODE:=UDT_CODE();
begin
temp_str := code_str;
delimiter_pos := instr(temp_str,delimiter);
i := 1;
while delimiter_pos>0 loop
acode := substr(temp_str,1, delimiter_pos-1);
temp_str := substr(temp_str,delimiter_pos+length(delimiter),length(temp_str));
tb_code.extend;
tb_code(tb_code.count):=obj_code(1,'');
tb_code(tb_code.count).id:=i;
tb_code(tb_code.count).code:=acode;
delimiter_pos := instr(temp_str,delimiter);
i := i+1;
end loop;
if temp_str is not null then
tb_code.extend;
tb_code(tb_code.count):=obj_code(1,'');
tb_code(tb_code.count).id:=i;
tb_code(tb_code.count).code:=temp_str;
end if;
return tb_code;
end FN_STR_TO_TBL;
--使用方法
select * from table(FN_STR_TO_TBL('111,222',','))