oracle pipelined 自定义函数 function 返回table格式
来源:互联网 发布:广东体育网络体育直播 编辑:程序博客网 时间:2024/05/16 13:52
oracle自定义函数返回一个表类型
下面主要是一个简单的例子,复制到oracle数据库的相应位置即可使用
1.定义type行类型
create or replace type t_test as object( id integer, create_time date, object_name varchar2(60));2.定义行类型的table
create or replace type t_test_table as table of t_test;
3.1创建存储过程,使用数组方式
create or replace function f_test( n in number default null)return t_test_tableasv_test t_test_table:=t_test_table();begin for i in 1 .. n loop v_test.extend(); v_test(v_test.count) :=t_test(i,sysdate,'name'||i); end loop; return v_test;end f_test;
3.2创建存储过程,使用管道方式
create or replace function f_test_pipe(n in number default null)return t_test_tablepipelined asv_test t_test_table:=t_test_table();begin for i in 1 .. nvl(n,100) loop pipe row(t_test(i,sysdate,'name'||i)); end loop; return ; end f_test_pipe;4.调用函数
select * from table(f_test_pipe(3));
以上参考此处
下面提工作中用到的,也可以直接使用
先创建此结果的类型行
create or replace type Type_Row_Test as object ( typeId varchar2(50), typePid varchar2(50), name varchar2(50) );
再创建table 用以存储结果
create or replace type Type_Table_Test as table of Type_Row_Test;
创建函数,循环,将结果放入Type_Table_Test中
create or replace FUNCTION F_Test(pIdIn NVARCHAR2)return Type_Table_Test pipelined --管道as v Type_Row_Test;begin for thisrow in ( SELECT typeId,typePid,name FROM tableName start with typeId=pIdIn connect by typePid=prior typeId)loop v:=Type_Row_Test(thisrow.typeId,thisrow.typePid,thisrow.name); pipe row(v); end loop; return;end;
select * from table(F_Test(paras));
上面是使用管道进行查询,也可以使用数组返回Table格式。
下面用另个一个例子,使用别一种形式,进行操作
定义type 类型行数据
create or replace type 行_解析_字串_参数 as object ( 输出字字符 varchar(50) );
使用行数据,定义表
create or replace type 表_解析_字串_参数 as table of 行_解析_字串_参数;
如果只有一个字段应该也可以使用下面这种方法,网上有这样的写法,有时间可以试一试
create or replace type 表_解析_字串_参数 as table of nvarchar2(50);
<pre name="code" class="sql">create or replace FUNCTION 解析_字串_参数tttt111111( p参数输入 NVARCHAR2,p分隔符号 nvarchar2)return 表_解析_字串_参数 asv 表_解析_字串_参数:=表_解析_字串_参数();v_list varchar2(100):=p参数输入; p_sep varchar2(1):=p分隔符号; l_idx varchar(100); begin loop l_idx:=instr(v_list,p_sep); if l_idx>0 then v.extend(); v(v.count) :=行_解析_字串_参数(ltrim(rtrim(substr(v_list,0,l_idx-1)))); v_list:=substr(v_list,l_idx+length(p_sep)); else v.extend(); v(v.count) :=行_解析_字串_参数(ltrim(rtrim(v_list))); exit; end if; end loop; return v; end;
调用函数,测试结果
select * from table(解析_字串_参数tttt111111(' 你好不,我不好,你呢 ',','));
注:解析字符串的函数,使用pipelined可以编译通过,但没有执行成功,报错PLS-00653:在PL/SQL定义域内不允许有聚集/表函数。有知道如何解决的,望告之。谢谢。
参考点击打开链接
0 0
- oracle pipelined 自定义函数 function 返回table格式
- Oracle管道函数(Pipelined Table Function)介绍
- Oracle管道函数(Pipelined Table Function)介绍
- oracle管道(pipelined function)函数用法
- Oracle Pipelined Function 管道函数实例
- oracle function 返回自定义类型Table
- oracle 管道化表函数(Pipelined Table)
- oracle 管道化表函数(Pipelined Table)
- PL/SQL 表函数, Cursor Variable, pipelined table function
- Oracle Pipelined Table
- Oracle Pipelined Table Functions
- Oracle Pipelined Table
- Oracle Pipelined Table Functions
- Oracle Pipelined Table Functions
- Oracle包体,包含存储过程,自定义函数(function),自定义类型(table),用函数返回自定义类型(相当于返回一张表)
- Oracle Pipelined Table Functions简介
- Oracle Pipelined Table Functions简介
- Multi-table Insert Using Pipelined Function
- const 和 #define区别
- 工作备忘-在xib/storyboard里面设置view圆角半径
- POJ 1321 *** 棋盘问题
- bootstrap-模态框
- 抗战时期为何汉奸多?
- oracle pipelined 自定义函数 function 返回table格式
- CSS实现div的高度填满剩余空间
- Linux中只列出目录
- 可选型(optional)
- 见闻上
- Unity 实用[xxx]用法
- Android获取有线网ip地址
- man的使用技巧
- APP中注册时常用的发送验证码的Button,带倒计时重发功能