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

Jak získáte pěkně naformátované výsledky z procedury Oracle, která vrací referenční kurzor?

Pokud GetQuestions je funkce vracející rekurzor, který se zdá být tím, co máte ve verzi pro SQL Server, pak byste mohli být schopni udělat něco takového:

select * from table(MyPackage.GetQuestions('OMG Ponies'));

Nebo pokud jej potřebujete v bloku PL/SQL, můžete použít stejný výběr v kurzoru.

Můžete také nechat funkci vytvořit dbms_output příkazy, takže jsou vždy k dispozici pro ladění, i když to trochu zvyšuje režii.

Upravit

Hmmm, nejsem si jistý, jestli je možné cast() vrácený rekurzor na použitelný typ, pokud nejste ochotni deklarovat svůj vlastní typ (a tabulku tohoto typu) mimo balíček. Můžete to však udělat jen pro výpis výsledků:

create package mypackage as
    function getquestions(user in varchar2) return sys_refcursor;
end mypackage;
/

create package body mypackage as
    function getquestions(user in varchar2) return sys_refcursor as
        r sys_refcursor;
    begin
        open r for
            /* Whatever your real query is */
            select 'Row 1' col1, 'Value 1' col2 from dual
            union
            select 'Row 2', 'Value 2' from dual
            union
            select 'Row 3', 'Value 3' from dual;
            return r;
    end;
end mypackage;
/

var r refcursor;
exec :r := mypackage.getquestions('OMG Ponies');
print r;

A výsledek volání můžete použít v jiné proceduře nebo funkci; jen dostat se k tomu mimo PL/SQL se zdá být trochu složité.

Upraveno za účelem přidání: S tímto přístupem, pokud je to postup, můžete udělat v podstatě to samé:

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;


  1. Získejte prvních n záznamů pro každou skupinu seskupených výsledků

  2. Sloučení zřetězení sloupců JSON(B) v dotazu

  3. Jak vypočítat konverzní poměr v MySQL?

  4. Chyby WAMP/MySQL nejsou ve správném jazyce