Oracle字元分隔函式 split

2021-09-08 18:57:35 字數 1304 閱讀 5952

為了讓 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

2 23 3

4 45 5

注:

使用上面的函式前需要先建立乙個型別

create or replace type strsplit_type is table of varchar2 (4000)

Oracle字元分隔函式 split

為了讓 pl sql 函式返回資料的多個行,必須通過返回乙個 ref cursor 或乙個資料集合來完成。ref cursor 的這種情況侷限於可以從查詢中選擇的資料,而整個集合在可以返回前,必須進行具體化。oracle 9i 通過引入的管道化表函式糾正了後一種情況。表函式是返回整個行的集 通常作為...

Oracle字元分隔函式 split

oracle字元分隔函式 split 為了讓 pl sql 函式返回資料的多個行,必須通過返回乙個 ref cursor 或乙個資料集合來完成。ref cursor 的這種情況侷限於可以從查詢中選擇的資料,而整個集合在可以返回前,必須進行具體化。oracle 9i 通過引入的管道化表函式糾正了後一種...

Oracle 根據分隔符分隔字串

為了讓pl sql 函式返回資料的多個行 必須通過返回乙個 ref cursor 或乙個資料集合來完成 ref cursor 的這種情況侷限於可以從查詢中選擇的資料 而整個集合在可以返回前 必須進行具體化 oracle 9i 通過引入的管道化表函式糾正了後一種情況 表函式是返回整個行的集 通常作為乙...