酒泉网站建设推广,ps做网站画布多大,建设门户网站请示,网站开发工具 知乎为了让 PL/SQL 函数返回数据的多个行#xff0c;必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据#xff0c;而整个集合在可以返回前#xff0c;必须进行具体化。Oracle 9i 通过引入的管道化表函数纠正了后一种情况。…为了让 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_typepipelined isv_idx integer;v_str varchar2(500);v_strs_last varchar2(4000) : p_value;beginloopv_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 2 3 3 4 4 5 5
注
使用上面的函数前需要先建立一个类型
CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000)