atgc的博客
===========================================================
字符串分隔
===========================================================

create or replace type acc_type as object
(acc varchar2(50))
/

create or replace type acc_table as table of acc_type
/

create or replace function str2table (acc_str in varchar2) return acc_table pipelined
is
v_str varchar2(30000) := acc_str;
v_acc varchar2(30);
v_acc_end pls_integer;
begin
loop
v_acc_end := instrb(v_str,',');
exit when (v_acc_end=0 or v_str is null);
v_acc := substrb(v_str,1,v_acc_end-1);
v_str := ltrim(v_str,v_acc);
v_str := ltrim(v_str,',');
pipe row(acc_type(rtrim(v_acc,';')));
end loop;
return;
end;
/

SQL> select * from table(str2table('TEST1,TEST1,12,123,55,99MOON,'));

ACC
--------------------------------------------------
TEST1
TEST1
12
123
55
99MOON

6 rows selected.

SQL>


atgc 发表于:2006.10.06 16:19 ::分类: ( 技术文章 ) ::阅读:(2380次) :: 评论 (2)
re: 字符串分隔 [回复]

要是加上分隔符作为输入参数就更具有通用性了
smile

naf_naf 评论于: 2006.12.04 22:44
re: 字符串分隔 [回复]

v_str := ltrim(v_str,v_acc);
好像有点问题,如果有连续两个相同的记录,就一起被删掉了

angus 评论于: 2007.02.01 16:39

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)




切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
网站链接...