PLSQL 實現split

來源:互聯網
上載者:User
PLSQL 實現split:

 

 

FUNCTION Get_Field_Value
    (
        in_str  IN VARCHAR2,
        findstr IN VARCHAR2,
        field   IN INTEGER
    ) RETURN VARCHAR2 AS
        tmp_msg VARCHAR2(20);
        -- 取欄位 值 ,field start from 0 
        startidx INTEGER;
        endidx   INTEGER;
    
    BEGIN
        startidx := 1;
        endidx   := 1;
    
        FOR i IN 1 .. field
        LOOP
            --INSTR(in_string,'|',tmp_pos);
            --substr(in_string,tmp_pos,tmp_pos1-tmp_pos); 
            IF i > 1 THEN
                startidx := INSTR(in_str, findstr, startidx);
                IF startidx = 0 THEN
                    RETURN NULL;
                END IF;
                startidx := startidx + length(findstr);
            END IF;
        END LOOP;
    
        endidx := INSTR(in_str, findstr, startidx);
        IF endidx = 0 THEN
            endidx := length(in_str) + 1;
        END IF;
    
        RETURN substr(in_str, startidx, endidx - startidx);
    
    EXCEPTION
        WHEN OTHERS THEN
            RETURN NULL;
    END;

 

例二

 

TYPE ARRAY IS TABLE OF VARCHAR2(255);
FUNCTION SPLIT(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2) RETURN ARRAY IS
    J         INT := 0;
    I         INT := 1;
    LEN       INT := 0;
    LEN1      INT := 0;
    STR       VARCHAR2(4000);
    STR_SPLIT ARRAY := ARRAY();
  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);
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT.COUNT) := STR;
      
        IF I >= LEN THEN
          EXIT;
        END IF;
      ELSE
        STR := SUBSTR(P_STR, I, J - I);
        I   := J + LEN1;
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT.COUNT) := STR;
      END IF;
    END LOOP;
  
    RETURN STR_SPLIT;
  END SPLIT;

 

調用:

STR_SPLIT := SPLIT('A,B,C,D,E,F', ',');
FOR I IN 1 .. STR_SPLIT.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(I);
END LOOP;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.