//概况
//基本上,当你希望一个PLSQL(或者java或者c)程序作为数据源,而不是表,
//你可能会用到管道函数(pipelined function).
//pipelined function操作起来就像一张表
//一个pl/sql函数可能会用于数据仓库的数据库里面,转换大量的数据。
//这可能包括格式化一系列转换数据,它们是不同的函数执行后得到的结果。
//在Oracle database 9i之前,大量的数据转换,既需要显著的内存开销,
//又需要在转换的每个阶段将数据存储在中间表里面。在这两种情况下,
//加载进程都会致使性能的下降。
//使用PL/SQL表函数,可以在数据转换的时候有效的减少开销。PL/SQL表函数
//可以接收和返回多行,交付这些数据,当他们准备好的时候,而不是一次性的处理;
//而且PL/SQL表函数还可以并行执行操作。
--
//实例1:生成随机数
//你怎么样用一条sql语句生成在1-49之间的互不相同的随机数呢?
//我们可能从一组已经生成的数中去查询(注意下面的最内层的查询);
//任何拥有大于等于49行记录的表都可以做到。若不使用管道函数的话,下面是最好的解决办法:
select r
from (select r
from (select rownum r
from all_objects
where rownum < 50)
order by dbms_random.value)
where rownum