sql >> Databáze >  >> RDS >> Oracle

Jak vytvořit obal, aby vrátil něco jiného než ref kurzor

Pomocí funkce kanálu můžete vrátit sadu výsledků po jednom záznamu, ale způsobem, kterému bude SQL engine rozumět.

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

Pomocí tohoto balíčku můžete vybrat svůj referenční kurzor:

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



  1. Chyba syntaxe MySQL

  2. 2 způsoby, jak vrátit nečíselné hodnoty v SQLite

  3. Lomítko nebo žádné lomítko?

  4. Transponování dynamických sloupců do řádků