日期:2014-05-17  浏览次数:20921 次

函数问题
建立一个函数,有两个参数expression,delimiter。功能是将字符串expression以delimiter为分隔符进行拆分,拆分后形成一个以下标1开始的字符串数组,如何实现?

另外一个问题,把存储过程放在某个包中有什么好处,如果不放在包中不是照样可以调用并完成相关任务吗?

------解决方案--------------------
--create type
create or replace type t_ret_table is table of varchar2(20);
/
--create function
create or replace function f_test(var_str in string,delimiter in string) return t_ret_table is
var_out t_ret_table;
var_tmp varchar2(2000);
var_element varchar2(2000);
begin
var_tmp := var_str;
var_out := t_ret_table();
while instr(var_tmp,delimiter)> 0 loop
var_element := substr(var_tmp,1,instr(var_str,delimiter)-1);
var_tmp := substr(var_tmp,instr(var_str,delimiter)+1,length(var_tmp));
var_out.extend(1);
var_out(var_out.count) := var_element;
end loop;
var_out.extend(1);
var_out(var_out.count) := var_tmp;
return var_out;
end f_test;
/
--测试
declare
aa t_ret_table;
begin
aa := f_test( 'a,b,c ', ', ');
for i in 1..aa.count loop
dbms_output.put_line(aa(i));
end loop;
end;
--result
a
b
c
------解决方案--------------------
不放在包里也是可以的,如果东西少,直接写成函数或者过程就可以了,功能复杂的话,相关的放到一个包里。