ITPub博客

首页 > Linux操作系统 > Linux操作系统 > pipeline 实例

pipeline 实例

原创 Linux操作系统 作者:chaobaojun 时间:2013-04-01 15:03:45 0 删除 编辑

 

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博客 ” ,链接:https://blog.itpub.net/21861353/viewspace-757571/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 抽象类
下一篇: dbms_sql.parse
请登录后发表评论 登录
全部评论

注册时间:2011-05-14

  • 博文量
    29
  • 访问量
    67526