pipeline 实例

 

CREATE OR REPLACE TYPE Lookup_Row AS OBJECT
(
  Idx  NUMBER,
  Text VARCHAR2(20)
)

create or replace type lookups_tab as table of lookup_row

CREATE OR REPLACE FUNCTION Lookups_Fn RETURN Lookups_Tab
  PIPELINED IS
  v_Row Lookup_Row;
BEGIN
  FOR j IN 1 .. 10 LOOP
    v_Row := CASE j
               WHEN 1 THEN
                Lookup_Row(1, 'one')
               WHEN 2 THEN
                Lookup_Row(2, 'TWO')
               WHEN 3 THEN
                Lookup_Row(3, 'three')
               WHEN 4 THEN
                Lookup_Row(4, 'FOUR')
               WHEN 5 THEN
                Lookup_Row(5, 'five')
               WHEN 6 THEN
                Lookup_Row(6, 'SIX')
               WHEN 7 THEN
                Lookup_Row(7, 'seven')
               ELSE
                Lookup_Row(j, 'other')
             END;
    PIPE ROW(v_Row);
  END LOOP;
  RETURN;
END Lookups_Fn;

很多人都知道,在普通的函数中,使用dbms_output输出的信息,需要在服务器执行完整个函数后一次性的返回给客户端。但你如果需要在客户端实时的输出函数执行过程中的一些信息,在Oracle 9i以后则可以使用管道函数(pipeline function)。

  PIPELINED(关键字)表明这是一个管道函数,管道函数的返回值类型必须为集合,在函数中,PIPE ROW语句被用来返回该集合的单个元素,函数则以一个空的RETURN语句结束,以表明它已经完成。

第二个实例:

create or replace type MsgType as table of varchar2(4000)

CREATE OR REPLACE FUNCTION f_Pipeline_Test RETURN Msgtype
  PIPELINED AS
BEGIN
  FOR i IN 1 .. 10 LOOP
    PIPE ROW('Iteration ' || i || ' at ' || Systimestamp);
    --Dbms_Lock 包要授权,要不提示没有定义 grant execute on dbms_lock to wms_ls;

      dbms_lock.sleep(seconds => 1);
  END LOOP;
  PIPE ROW('All done!');
  RETURN;
END;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21861353/viewspace-757571/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21861353/viewspace-757571/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值