自定义函数实现字符串分割,返回集合类型

本文介绍了一种在Oracle数据库中自定义SQL函数的方法,该函数能够将带有特定分隔符的字符串进行分割,并返回一个字符串数组。通过示例演示了如何创建此函数以及如何调用它来处理字符串'tom,lucy,lily'。

为了实现将tom,lucy,polly这种样式的字符串按照分隔符分割,可以使用下面的自定义函数:


--创建工具类型
CREATE OR REPLACE TYPE VARCHAR2ARRAY AS TABLE OF VARCHAR2(1000);

--创建工具函数
CREATE OR REPLACE FUNCTION SPLITSTR2ARRAY(v_sourcestring IN VARCHAR2,v_delimiter IN VARCHAR2)
  RETURN VARCHAR2ARRAY
IS
  v_len NUMBER;
  v_tmpstr VARCHAR2(1000);
  v_postion1 NUMBER := 0;
  v_postion2 NUMBER := 0;
  v_resultarray VARCHAR2ARRAY := VARCHAR2ARRAY();
BEGIN
  v_tmpstr := TRIM(v_delimiter FROM TRIM(v_sourcestring));
  v_len := LENGTH(v_tmpstr);
  IF v_len = 0 THEN
    RETURN v_resultarray;
  ELSIF INSTR(v_tmpstr,v_delimiter) = 0 THEN
    v_resultarray.extend;
    v_resultarray(v_resultarray.count) := TRIM(v_tmpstr);
    RETURN v_resultarray;
  ELSE
    WHILE INSTR(v_tmpstr,v_delimiter) > 0 LOOP
      v_resultarray.extend;
      v_resultarray(v_resultarray.count) := SUBSTR(v_tmpstr,1,INSTR(v_tmpstr,v_delimiter)-1);
      v_tmpstr := SUBSTR(v_tmpstr,INSTR(v_tmpstr,v_delimiter)+1,LENGTH(v_tmpstr));
    END LOOP;
    v_resultarray.extend;
    v_resultarray(v_resultarray.count) := TRIM(v_delimiter FROM TRIM(v_tmpstr));
    RETURN v_resultarray;
  END IF;
END SPLITSTR2ARRAY;
/

--使用

declare v_results VARCHAR2ARRAY := VARCHAR2ARRAY();
v_counter NUMBER;
begin
SELECT SPLITSTR2ARRAY('tom,lucy,lily',',') INTO v_results FROM dual;
v_counter := v_results.first;
WHILE v_counter IS NOT NULL LOOP
dbms_output.put_line(v_results(v_counter));
v_counter := v_results.next(v_counter);
END LOOP;
end;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28998293/viewspace-1311627/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28998293/viewspace-1311627/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值