oracle資料庫自定義split函式
阿新 • • 發佈:2018-11-27
--dba授予建立型別的許可權
grant CREATE ANY TYPE to userName;
--普通使用者建立
CREATE OR REPLACE TYPE type_str IS TABLE OF VARCHAR2 (100) ;
-- 再建立split函式,程式碼如下:
CREATE
OR REPLACE FUNCTION SPLIT (
p_str VARCHAR2,
p_delimiter VARCHAR2 DEFAULT ','
) RETURN type_str IS rs type_str := type_str () ; l_str VARCHAR2 (4000 ) := '' ; l_len NUMBER := 0 ;
BEGIN
l_str := p_str ; l_len := LENGTH (p_delimiter) ; while LENGTH (l_str) > 0 loop
IF INSTR (l_str, p_delimiter) > 0 THEN
rs. EXTEND ; rs (rs. COUNT) := SUBSTR (
l_str,
1,
INSTR (l_str, p_delimiter) - 1
) ; l_str := SUBSTR (
l_str,
INSTR (l_str, p_delimiter) + l_len
) ;
ELSE
rs. EXTEND ; rs (rs. COUNT) := l_str ; exit ;
END
IF ;
END loop ; RETURN rs ;
END ;
-- 測試
SELECT
COLUMN_VALUE
FROM
TABLE (
SPLIT ('1001,1002,1003', ',')
) ;
SELECT
TO_NUMBER (COLUMN_VALUE)
FROM
TABLE (SPLIT('1001,1002,1003')) ;