2、管道化表函数必须返回一个集合。在函数中,PIPEROW语句被用来返回该集合的单个元素,该函数必须以一个空的RETURN语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用TABLE操作符从SQL查询中调用它。 管道化表函数经常被用来把数据从一种类型转化成另一种类型。 下面是用PipelinedTable实现split函数的例子:CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);CREATE OR REPLACE FUNCTION fn_split
3、(p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split PIPELINEDIS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000);BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j < len LOOP j := INSTR
4、(p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); PIPE ROW (str); IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i);
5、 i := j + len1; PIPE ROW (str); END IF; END LOOP; RETURN;END fn_split;/测试:SELECT*FROMTABLE(fn_split('1;;12;;123;;1234;;12345',';;'));结果:112123123412345 又一个简单的例子:CREATE TYPE mytype AS OBJECT ( field1 NUMBER, field2 VARCHAR2 (50));CREATE TYP
6、E mytypelist AS TABLE OF mytype;CREATE OR REPLACE FUNCTION pipelineme RETURN mytypelist PIPELINEDIS v_mytype mytype;BEGIN FOR v_count IN 1 .. 20 LOOP v_mytype := mytype (v_count, 'Row '
7、
8、 v_count); PIPE ROW (v_mytype); END LOOP; RETURN;END pip