sql >> Database teknologi >  >> RDS >> Oracle

Hvordan man laver en wrapper for at returnere noget andet end ref cursor

Du kan bruge en pipeline-funktion til at returnere et resultatsæt én post ad gangen, men på en måde, som SQL-motoren kan forstå.

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;
/

Ved at bruge denne pakke kan du vælge din ref cursor:

SELECT if_type
      ,number_infected
FROM table(WrapperSample.getADedIcWarningsProv(1, 2))



  1. Brug af rekursiv CTE med Ecto

  2. Integrering af MySQL med Python i Windows

  3. Vælg flere id'er fra en tabel

  4. Bruger du .aggregate() på en værdi introduceret ved hjælp af .extra(select={...}) i en Django-forespørgsel?