oracle函数创建数组,一个简单的oracle函数返回数组的例子

一个分隔字符串的例子:

把'a|||b|||c'字符串分隔成

a

b

c

create or replace function f_test(var_str 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,'|||')>0 loop

var_element := substr(var_tmp,1,instr(var_str,'|||')-1);

var_tmp := substr(var_tmp,instr(var_str,'|||')+3,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;

/

set serverout on

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;

/

create or replace function f_test(var_str in string) return t_ret_table PIPELINED

as

var_tmp varchar2(2000);

var_element varchar2(2000);

begin

var_tmp := var_str;

while instr(var_tmp,'|||')>0 loop

var_element := substr(var_tmp,1,instr(var_str,'|||')-1);

var_tmp := substr(var_tmp,instr(var_str,'|||')+3,length(var_tmp));

pipe row(var_element);

end loop;

pipe row(var_tmp);

return;

end f_test;

/

select * from table(f_test('a|||b|||c'));

另外一个分割字符串的例子:

分割字符串问题!

问题源自http://www.itpub.net/626418.html

/*

怎样支掉字符串中逗号间重复的字符

如 ',1,2,5,9,1,2,5,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,'怎样支掉字符串中逗号间重复的字符,并将字符升序排列,得到

',1,2,3,5,9,'

百思不得其解,是高手的试一下。

解答:

select col from(

select sys_connect_by_path(col,',')||',' col,level from(

select col,row_number() over(order by rownum) rn from (

select distinct substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (

select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual

) connect by rownum)

)

connect by prior rn = rn -1 order by level desc

) where rownum=1

*/

这个问题的解决办法中的一部分(按照固定分隔符分割字符串)可以解决http://www.itpub.net/515354.html

/*

要求用pl/sql写一个函数, 实现根据分割符把原字符串分成若干个字符串功能.

输入: string(字符串) 和 Delimiter (分隔符)

输出: substr1, ..., substrn (根据分割后的字符串排序, 不是子串在原字符串中的顺序)

解答:

select substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (

select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual

) connect by rownum

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值