Oracle 自定義split 函數(shù)實例詳解
Oracle 自定義split 函數(shù)
Oracle沒有提供split函數(shù),但可以自己建立一個函數(shù)實現(xiàn)此功能。比如“abc defg hijkl nmopqr stuvw xyz”,分隔符是空格,但空格個數(shù)不定。
源代碼:
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;
/
測試:
結(jié)果:
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;
/
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Oracle導(dǎo)出文本文件的三種方法(spool,UTL_FILE,sqluldr2)
這篇文章主要介紹了Oracle導(dǎo)出文本文件的三種方法(spool,UTL_FILE,sqluldr2),需要的朋友可以參考下2023-05-05
Oracle(90)數(shù)據(jù)庫如何創(chuàng)建用戶(User)
這篇文章主要介紹了在Oracle數(shù)據(jù)庫中創(chuàng)建用戶的過程,包括連接到數(shù)據(jù)庫、創(chuàng)建用戶、分配權(quán)限、分配表空間和設(shè)置賬戶狀態(tài),提供了詳細(xì)的步驟和代碼示例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
Oracle兩張表關(guān)聯(lián)批量更新其中一張表的數(shù)據(jù)
本文給大家分享兩種方法解決Oracle兩張表關(guān)聯(lián)批量更新其中一張表的數(shù)據(jù),方法非常簡單,具有參考借鑒價值,需要的的朋友參考下吧2017-06-06
And,Where使用提示以及用+進行左關(guān)聯(lián)的提示及注意事項
先左關(guān)聯(lián)后在過濾假如關(guān)聯(lián)的結(jié)果里面B.b3=null那么你在where后面在加B.b3=2那么結(jié)果中B.b3肯定是沒有null的情況的,也就是說用+進行左關(guān)聯(lián)沒有用leftjoin靈活待后續(xù)看是否有什么好的解決方案2013-02-02
oracle數(shù)據(jù)庫添加或刪除一列的sql語句
需要注意的一點,如果要修改的表,不是當(dāng)前的用戶的表,那么就需要添加上用戶的名稱。以及有修改此表的權(quán)限2012-05-05

