pl/sql中實現字符串分割


在網上找了很久,看到有幾種實現方法,其中以下面的這種方法最為適合,

/**
用pipe函數實現字符串分割
**/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (20);
/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
    j INT := 0;
    i INT := 1;
    len INT := 0;
    len1 INT := 0;
    str VARCHAR2 (4000);
BEGIN
    len := LENGTH (p_str);
    len1 := LENGTH (p_delimiter);

    WHILE j < len LOOP
       j := INSTR (p_str, p_delimiter, i);

       IF j = 0 THEN
           j := len;
          str := SUBSTR (p_str, i);
          PIPE ROW (str);
          IF i >= len THEN
              EXIT;
          END IF;
       ELSE
          str := SUBSTR (p_str, i, j - i);
          i := j + len1;
          PIPE ROW (str);
       END IF;
    END LOOP;

    RETURN;
END fn_split;
/

 

--測試:

--1直接在sql中調用
SELECT fn_split ('1;;12;;123;;1234;;12345', ';;') FROM dual;
--2生成table
SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));
--3在存儲過程中使用的方法
create or replace procedure test(str varchar2,splitchar varchar2)
is
cstr ty_str_split;
I number;
begin
  select fn_split (str,splitchar) into cstr from dual;
  for I in cstr.first()..cstr.last() loop
    dbms_output.put_line(cstr(I));
  end loop;
end;
/
exec test('fadsffadsf','a')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM