將在一列的以逗號隔開的列資料轉化為行資料顯示的函數,逗號資料顯示

來源:互聯網
上載者:User

將在一列的以逗號隔開的列資料轉化為行資料顯示的函數,逗號資料顯示

<pre name="code" class="sql">這個是字串分割函數的使用例子select to_number(strvalue) as Value from table(fn_split('1,2,3',',')) select to_char(strvalue) as Value from table(fn_split('aa,bb,cc',','))
</pre><pre name="code" class="sql">函數:

</pre><pre name="code" class="sql">CREATE OR REPLACE FUNCTION ROOT.fn_split(  p_str       IN VARCHAR2,  p_delimiter IN VARCHAR2)RETURN ty_tbl_str_split IS  j         INT := 0;  i         INT := 1;  -- 被分割的源字串 的長度.  len       INT := 0;  -- 分隔字串的長度  len1      INT := 0;  -- 暫存的中間每一個單元的文本資訊.  str       VARCHAR2(4000);  -- 預期返回結果.  str_split ty_tbl_str_split := ty_tbl_str_split();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=0 意味著沒有找到.      -- 可以理解為是查詢到最後一個單元了.      -- 設定 j := len, 讓外部的迴圈處理可以結束了.      j  := len;      -- 擷取最後一個單元的內容.      str := SUBSTR(p_str, i);      -- 結果追加一行.      str_split.EXTEND;      -- 設定結果內容.      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);       IF i >= len THEN        EXIT;      END IF;    ELSE      -- 如果在被分割的源字串中,找到了 分隔字串.      -- 首先,擷取分割的內容.      str := SUBSTR(p_str, i, j - i);      -- 然後設定索引, 下一次再尋找的時候,從指定的索引位置開始(不是從0開始找了)      i := j + len1;      -- 結果追加一行.      str_split.EXTEND;      -- 設定結果內容.      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);    END IF;  END LOOP;    RETURN str_split;END fn_split;

相關文章

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.