导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试
数据库

Oracle 自定义split 函数实例详解

时间:01-13   作者:YDW   来源:YDW.ORG   阅读:149  
内容摘要:函数没有提供split函数,但可以自己建立一个函数实现此功能。xyz”,分隔符是空格,但空格个数不定。源代码:测试结果:

云端网

自定义split 函数

没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg hijkl 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; /

(云端网 )

www.ydw.org


标签:Oracle  函数  
网站版权  8888888888  8888888888