Oracle字元分隔函數(split)

來源:互聯網
上載者:User

為了讓 PL/SQL 函數返回資料的多個行,必須通過返回一個 REF CURSOR 或一個資料集合來完成。REF CURSOR 的這種情況局限於可以從查詢中選擇的資料,而整個集合在可以返回前,必須進行具體化。Oracle 9i 通過引入的管道化表函數糾正了後一種情況。表函數是返回整個行的集(通常作為一個集合)的函數,可以直接從 SQL 陳述式中進行查詢,就好像它是一個真正的資料庫表一樣。管道化表函數與之相似,但是它像在構建時一樣返回資料,而不是一次全部返回。管道化表函數更加有效,因為資料可以儘可能快地返回。

管道化表函數必須返回一個集合。在函數中,PIPE ROW 語句被用來返回該集合的單個元素,該函數必須以一個空的 RETURN 語句結束,以表明它已經完成。一旦我們建立了上述函數,我們就可以使用 TABLE 操作符從 SQL 查詢中調用它。

管道化表函數經常被用來把資料從一種類型轉化成另一種類型。

create or replace function strsplit(p_value varchar2,                                    p_split varchar2 := ',')--usage: select * from table(strsplit('1,2,3,4,5')) return strsplit_type  pipelined is  v_idx       integer;  v_str       varchar2(500);  v_strs_last varchar2(4000) := p_value;begin  loop    v_idx := instr(v_strs_last, p_split);    exit when v_idx = 0;    v_str       := substr(v_strs_last, 1, v_idx - 1);    v_strs_last := substr(v_strs_last, v_idx + 1);    pipe row(v_str);  end loop;  pipe row(v_strs_last);  return;end strsplit;
usage: select * from table(strsplit('1,2,3,4,5'))

1 1
22
33
44
55




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.