Oracle 管道函数pipelined function简单的使用
如果在函数(function)中加关键字 pipelined
,就表明这是一个oracle管道函数,其返回值类型必为 集合,体现出来的数据结构类似于表,即可以理解成,使用管道函数可以返回一张查询表,可以是单行数据也可以是多行数据,而不是平常函数返回的单行数据
这种返回多行数据在需要大数据量处理的时候很有用,且在复杂的方法下更好地去处理一些复杂的逻辑查询
要使用管道函数的话需要先进行一下类型的类型的创建
首先我们创建一个类型对象
CREATE OR REPLACE Type test_Row_Type As Object
(
test1 Varchar2(512),
test2 Varchar2(3000),
test3 Varchar2(3000),
test4 Varchar2(3000),
test5 Varchar2(3000),
test6 Number,
test7 Number
)
然后我们创建嵌套的表
CREATE OR REPLACE TYPE test_Row_Type_TABLE AS TABLE OF test_Row_Type;
接下来创建一个临时表,用来测试数据
create table TTTtable
(
aaa VARCHAR2(50),
bbb VARCHAR2(50),
ccc VARCHAR2(50)
)
其中数据如下
然后我们开始写管道函数
CREATE OR REPLACE FUNCTION test_Row_pipelined(p_varchar in varchar2)
return test_Row_Type_TABLE
--关键字加在这里
pipelined as
p_num integer := 0;
ret test_Row_Type;
begin
--查询临时表数据
for sub_data in (select t.bbb, t.ccc
from TTTtable t
where t.aaa = p_varchar) loop
p_num := p_num + 1;
ret := test_Row_Type(p_num,
sub_data.bbb,
sub_data.ccc,
'',
'',
0,
0);
--将数据放入管道,pipe row()语法被用来返回该集合的单个元素
pipe row(ret);
end loop;
--函数使用一个空的return结束
return;
end;
如果是使用
select test_Row_pipelined('a') from dual
则返回的是<Collection>
数据,此时在PL/SQL中打开就是这样的
同时,我们还可以使用这种语法
select * from table(test_Row_pipelined('a')) t
结果也是这样的,不过推荐使用这种方法,因为这种方式是可以使用where条件去进行过滤的
比如我们加上where
select t.* from table(test_Row_pipelined('a')) t where t.test1 = 1
则得到的结果就是这样的
这就是管道函数的最基本的用法
标签:function,函数,test,管道,pipelined,Oracle,Type,Row From: https://www.cnblogs.com/jokingremarks/p/17583048.html