在Oracle的函数中,返回表类型
来源:互联网 发布:2×3矩阵的值怎么求 编辑:程序博客网 时间:2024/06/03 16:33
在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。
管道化表函数必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。
1、创建表对象类型。
在Oracle中想要返回表对象,必须自定义一个表类型,如下所示:
create or replace type t_table is table of number;
上面的类型定义好后,在function使用可用返回一列的表,如果需要多列的话,需要先定义一个对象类型。然后把对象类型替换上面语句中的number;
定义对象类型:
create or replace type obj_table as object( id int, name varchar2(50))
修改表对象类型的定义语句如下:
create or replace type t_table is table of obj_table;
2、 创建演示函数
在函数的定义中,可以使用管道化表函数和普通的方式,下面提供两种使用方式的代码:
1)、管道化表函数方式:
create or replace function f_pipe(s number)return t_table pipelinedas v_obj_table obj_table; begin for i in 1..s loop v_obj_table := obj_table(i,to_char(i*i)); pipe row(v_obj_table); end loop;return;end f_pipe;
注意:管道的方式必须使用空的return表示结束.
调用函数的方式如下:
select * from table(f_pipe(5));
2)、 普通的方式:
create or replace function f_normal(s number)return t_tableas rs t_table:= t_table();begin for i in 1..s loop rs.extend; rs(rs.count) := obj_table(rs.count,'name'||to_char(rs.count)); --rs(rs.count).name := rs(rs.count).name || 'xxxx'; end loop;return rs;end f_normal;
初始化值后还可以想注视行那样进行修改.
调用方式如下:
select * from table(f_normal(5));
OK, The End...
- 在Oracle的函数中,返回表类型
- 在Oracle的函数中,返回表类型
- 在Oracle的函数中,返回表类型(管道表函数)
- Oracle函数返回表类型
- ORACLE创建函数(返回表类型)的写法
- Oracle 截取字符串函数 返回表类型
- oracle 自定义函数 返回一个表类型
- oracle自定义函数返回表类型
- oracle 自定义函数 返回一个表类型
- 在Scala中,为什么函数的参数类型是逆变的,而函数的返回值协变的
- 在WCF中能返回的类型
- 仅返回类型不同的函数,在C++中如何实现重载?
- 函数的返回类型
- 函数的返回类型
- C++中函数返回值得问题--返回类型的引用和仅返回类型的区别
- oracle返回表类型
- 函数返回表类型
- oracle 自定义函数 返回一个表类型(转)
- Android屏幕密度(Density)和分辨率的关系
- 使用SqlBulkCopy批量快速插入大量数据到SQL SERVER
- ubuntu12.04安装ubuntu one失败
- ASP.NET MVC HtmlHelper用法集锦
- 步步测试完善Java中Socket通信图解法(一)
- 在Oracle的函数中,返回表类型
- Oracle DUPLICATE复制数据库
- 找出两个字符串中最大公共子字符串
- 谈谈大型网站的负载均衡器、db proxy和db
- ASP.NET MVC3 Razor 调试与预加载
- org.hibernate.LazyInitializationException: failed to lazily initialize a col
- 排序专题(一) / 稳定的内部排序
- 连接数据库的两种连接字符串
- 阿里巴巴易错题(我知道内存对齐,但还是倒下了)