原创

Oracle 自定义split 函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://wxy0327.blog.csdn.net/article/details/53927170

Oracle没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg  hijkl   nmopqr     stuvw  xyz”,分隔符是空格,但空格个数不定。

源代码:

CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);

CREATE OR REPLACE FUNCTION fn_var_split (
    p_str 
IN VARCHAR2,
    p_delimiter 
IN VARCHAR2
)
    
RETURN ty_str_split
IS
    j 
INT := 0;
    
len INT := 0;
    
str VARCHAR2 (4000);
    str_split ty_str_split :
= ty_str_split ();
    v_str 
VARCHAR2 (4000) := RTRIM (LTRIM (p_str, p_delimiter), p_delimiter);
BEGIN
    
len := LENGTH (v_str);

    
WHILE len > 0
    LOOP
        j :
= INSTR (v_str, p_delimiter, 1);

        
IF j = 0
        
THEN
            
str := SUBSTR (v_str, 1);
            
len := 0;
            str_split.EXTEND;
            str_split (str_split.
COUNT) := str;
        
ELSE
            
str := SUBSTR (v_str, 1, j - 1);
            v_str :
= LTRIM (LTRIM (v_str, str), p_delimiter);
            
len := LENGTH (v_str);
            str_split.EXTEND;
            str_split (str_split.
COUNT) := str;
        
END IF;
    
END LOOP;

    
RETURN str_split;
END fn_var_split;
/


测试

结果:

1
12
123
1234
12345
  

DECLARE
    
CURSOR c
    
IS
        
SELECT * FROM TABLE (CAST (fn_var_split (';1;12;;123;;;1234;;;;12345;'';'AS ty_str_split));
    r c
%ROWTYPE;
BEGIN
    
OPEN c;
    LOOP
        
FETCH c INTO r;
        
EXIT WHEN c%NOTFOUND;
        DBMS_OUTPUT.put_line (r.column_value);
    
END LOOP;
    
CLOSE c;
END;
/
文章最后发布于: 2016-12-29 14:04:17
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览