PL SQL如何将多个包装器放在一个包中

时间:2011-01-18 16:23:27

标签: sql database oracle plsql

参考:How to make a wrapper to return something other than ref cursor

我有许多与下面类似的包装函数,当然只返回不同的列。我如何将它们全部放在一个包装中。因为下面的例子是每次都替换我的包装包。

我想知道如何删除顶部的全局声明,以便我可以在同一个包中添加许多不同的返回列

create or replace package WrapperSample is

  type TResultRow is record(
     if_type         codes.cd%type
    ,number_infected Integer);

  type TResultRowList is table of TResultRow;

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined;

end WrapperSample;
/

create or replace package body WrapperSample is

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined is
    v_refcur   eOdatatypes_package.eOrefcur;
    currentRow TResultRow;
  begin
    v_refcur := YourSchema.getADedIcWarningsProv(p_hos_id, p_date);

    loop
      fetch v_refcur
        INTO currentRow;
      exit when v_refcur%NotFound;
      pipe row(currentRow);
    end loop;

    close v_refcur;

    return;
  end;

end WrapperSample;
/

1 个答案:

答案 0 :(得分:4)

您将为每个不同的列集使用一个记录定义和一个表定义。

create or replace package WrapperSample is

  type R_WarningsProv is record(/*...*/);

  type T_WarningsProv is table of R_WarningsProv ;

  function GetADedIcWarningsProv(/*...*/) return T_WarningsProv pipelined;

  type R_OtherFunction is record(/*...*/);

  type T_OtherFunction is table of R_OtherFunction ;

  function OtherFunction(/*...*/) return T_OtherFunction pipelined;

  /* Multiple functions can use the same types as long as 
     they share the same column definition */

  function SomeOtherFunction(/*...*/) return T_OtherFunction pipelined;

end WrapperSample;