zoukankan      html  css  js  c++  java
  • 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')

  • 相关阅读:
    Git使用
    A star算法
    禅语人生
    android中GridView
    关于Android资源学习
    买了胡百敬老师的<SQL SERVER 2008 管理实战>
    人生七苦
    SQL Server 2008实现"编辑所有行"和"返回所有行"的方法
    陈慧娴《永远是你的朋友》专辑歌词
    SQL Server 2008 Service Pack 1 简体中文补丁包下载
  • 原文地址:https://www.cnblogs.com/gisdream/p/2513332.html
Copyright © 2011-2022 走看看