میخواهیم برنامهای داشته باشیم که مقادیر ‘aaa,bb,ccc,rrrr’ را بر مبنای کاراکتر ‘,’ از هم جدا کرده و خروجی زیر را تولید کنید
aaa
bb
ccc
rrrr
برای انجام این کار باید از برنامه زیر استفاده کنیم
create or replace package word_find is
type type_return is table of varchar2(1000);
function instr_word(p_input_str clob, p_seperate_char char)
return type_return
pipelined;
end word_find;
/***********************/
create or replace package body word_find is
function instr_word(p_input_str clob, p_seperate_char char)
return type_return
pipelined is
v_str clob := p_input_str;
v_comma_position number;
v_substr clob;
v_position_start_for_substr number := 1;
v_return type_return := type_return();
begin
loop
v_comma_position := instr(v_str,
p_seperate_char,
v_position_start_for_substr,
1);
exit when v_comma_position = 0;
v_substr := substr(v_str,
v_position_start_for_substr,
v_comma_position –
v_position_start_for_substr);
v_position_start_for_substr := v_comma_position + 1;
dbms_output.put_line(v_substr);
v_return.extend();
v_return(v_return.last) := v_substr;
pipe row(to_char(v_return(v_return.last)));
end loop;
v_substr := substr(v_str,
– (length(v_str) –
instr(v_str, p_seperate_char, -1, 1)));
dbms_output.put_line(v_substr);
v_return.extend();
v_return(v_return.last) := v_substr;
pipe row(to_char(v_return(v_return.last)));
dbms_output.put_line(‘/****************/’);
end;
end word_find;
در برنامه فوق که یک پکیج است که در داخل آن از یک Table Function استفاده شده است در پارامتر p_input_str مقدار رشتهای مورد نظر را ارسال کرده و در پارامتر p_seperate_char جدا کنندهای که در مقدار ورودی وجود دارد را معرفی میکنیم، نحوه فراخوانی برنامه فوق به شکل ذیل میباشد
select * from table(word_find.instr_word(‘aaa,bb,ccc,rrrr’ , ‘,’));