oracle的管道化表函数pipelinedtable

oracle的管道化表函数pipelinedtable

ID:34725168

大小:97.68 KB

页数:4页

时间:2019-03-10

oracle的管道化表函数pipelinedtable_第1页
oracle的管道化表函数pipelinedtable_第2页
oracle的管道化表函数pipelinedtable_第3页
oracle的管道化表函数pipelinedtable_第4页
资源描述:

《oracle的管道化表函数pipelinedtable》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle的管道化表函数(PipelinedTable)为了让PL/SQL函数返回数据的多个行,必须通过返回一个REFCURSOR或一个数据集合来完成。REFCURSOR的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。Oracle9i通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从SQL语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。   

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

9、elineme; SELECT*FROMTABLE(pipelineme);FIELD1FIELD2 ------------------------------    1Row1    2Row2    3Row3    4Row4    5Row5    6Row6    7Row7    8Row8    9Row9   10Row10   11Row11   12Row12   13Row13   14Row14   15Row15   16Row16   17Row17   18Row18   19Row19   20Row2020ro

10、wsselected

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。