sql >> Database >  >> RDS >> Oracle

Hoe krijg je mooi opgemaakte resultaten van een Oracle-procedure die een referentiecursor retourneert?

Als GetQuestions is een functie die een refcursor retourneert, wat lijkt te zijn wat je hebt in de SQL Server-versie, dan kun je misschien iets als dit doen:

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

Of als je het nodig hebt in een PL/SQL-blok, dan kun je dezelfde select in een cursor gebruiken.

U kunt de functie ook de dbms_output . laten produceren instructies in plaats daarvan zodat ze altijd beschikbaar zijn voor debuggen, hoewel dat een beetje overhead met zich meebrengt.

Bewerken

Hmmm, ik weet niet zeker of het mogelijk is om cast() de geretourneerde refcursor naar een bruikbaar type, tenzij je bereid bent om je eigen type (en een tabel van dat type) buiten het pakket te declareren. Je kunt dit echter wel doen, gewoon om de resultaten te dumpen:

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;

En u kunt het resultaat van de aanroep gebruiken in een andere procedure of functie; het komt gewoon buiten PL/SQL, dat lijkt een beetje lastig te zijn.

Bewerkt om toe te voegen: Met deze aanpak kun je, als het een procedure is, in wezen hetzelfde doen:

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


  1. Hoe schakel ik referentiële integriteit in Postgres 8.2 uit?

  2. Verwijder duplicaten uit Count() Resultaten in SQLite

  3. Samengestelde primaire sleutel in django

  4. mysql fulltext zoeken mislukt