Oracle 函数,如果不用管道函数你会怎么做?

zaq5613758 2014-06-26 01:46:30

编写一个函数,将具有某个特殊分隔符的字符串转成数组:
如字符串 UASD1M,123,1882,IID
根据分割符 , 分别将 UASD1M 123 1882 IID 存入数组中



管道函数的做法:
1、创建type用于存储函数返回值
create or replace type type_split as table of varchar2(4000);
2、Function代码(管道函数)
create or replace function test_split(p_list VARCHAR2, p_sep VARCHAR2) return type_split
PIPELINED IS
l_idx PLS_INTEGER;
v_list VARCHAR2(32767) := p_list;
begin
LOOP
l_idx := instr(v_list, p_sep);
IF l_idx > 0 THEN
PIPE ROW(substr(v_list, 1, l_idx - 1));
v_list := substr(v_list, l_idx + length(p_sep));
ELSE
PIPE ROW(v_list);
EXIT;
END IF;
END LOOP;
RETURN;
end test_split;
3、函数调用及结果查看
SELECT * FROM table(test_split('aaa,bbb,ccc',',')) ;
如果不用上面的这中做法,你能做出来吗?
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaq5613758 2014-06-26
  • 打赏
  • 举报
回复
我是想说如果 用其他函数怎么做
hyee 2014-06-26
  • 打赏
  • 举报
回复
比如说xmltable,如果你是11G的话,可以这样:
SELECT (COLUMN_VALUE).getstringval() FROM XMLTABLE('"aaa","bbb","ccc"')
关于那个connect by的,你可以参考这个http://blog.csdn.net/eleven204/article/details/6638083 还有其他的方法,比如说你可以先把字符串转换成xml格式,然后用xmlsequence转换成表,总之方法很多,在网上多找找就有
CT_LXL 2014-06-26
  • 打赏
  • 举报
回复
引用 2 楼 zaq5613758 的回复:
帮忙写一个出来,用ORACLE写

select REGEXP_SUBSTR('UASD1M,123,1882,IID', '[^,]+', 1, LEVEL) STR
  from dual
CONNECT BY LEVEL <= REGEXP_COUNT('UASD1M,123,1882,IID', ',') + 1
       and prior dbms_random.value is not null;
CT_LXL 2014-06-26
  • 打赏
  • 举报
回复
引用 2 楼 zaq5613758 的回复:
帮忙写一个出来,用ORACLE写
核心代码,如:
WITH T AS
 (SELECT 'UASD1M,123,1882,IID' C1 FROM DUAL)
select REGEXP_SUBSTR(C1, '[^,]+', 1, LEVEL) STR
  from T
CONNECT BY LEVEL <= REGEXP_COUNT(C1, ',') + 1
       and rowid = prior rowid
       and prior dbms_random.value is not null;
zaq5613758 2014-06-26
  • 打赏
  • 举报
回复
帮忙写一个出来,用ORACLE写
hyee 2014-06-26
  • 打赏
  • 举报
回复
方法太多了吧,xmltable, connect_by等都可以

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧