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

Hvordan får du pænt formaterede resultater fra en Oracle-procedure, der returnerer en referencemarkør?

Hvis GetQuestions er en funktion, der returnerer en refcursor, som ser ud til at være det, du har i SQL Server-versionen, så er du måske i stand til at gøre noget som dette:

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

Eller hvis du har brug for det i en PL/SQL-blok, kan du bruge det samme valg i en markør.

Du kan også få funktionen til at producere dbms_output sætninger i stedet, så de altid er tilgængelige til fejlretning, selvom det tilføjer lidt ekstra omkostninger.

Rediger

Hmmm, ikke sikkert det er muligt at cast() den returnerede refcursor til en brugbar type, medmindre du er villig til at erklære din egen type (og en tabel af den type) uden for pakken. Du kan dog gøre dette, bare for at dumpe resultaterne:

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;

Og du kan bruge resultatet af opkaldet i en anden procedure eller funktion; det er bare at komme til det uden for PL/SQL, der ser ud til at være lidt vanskeligt.

Redigeret for at tilføje: Med denne tilgang, hvis det er en procedure, kan du stort set gøre det samme:

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


  1. Kopier sqlite i Android Studio-aktiver virker ikke

  2. Indlæser billeddata i BLOB-kolonner i Oracle

  3. GROUP BY i UPDATE FROM-klausulen

  4. JSON_KEYS() – Returner nøglerne fra et JSON-objekt i MySQL