Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak uzyskać ładnie sformatowane wyniki z procedury Oracle, która zwraca kursor referencyjny?

Jeśli GetQuestions jest funkcją zwracającą refcursor, który wydaje się być tym, co masz w wersji SQL Server, to raczej możesz zrobić coś takiego:

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

Lub jeśli potrzebujesz tego w bloku PL/SQL, możesz użyć tego samego wyboru w kursorze.

Możesz również sprawić, by funkcja wytworzyła dbms_output zamiast tego, są one zawsze dostępne do debugowania, chociaż dodaje to trochę narzutu.

Edytuj

Hmmm, nie jestem pewien, czy można cast() zwrócony refcursor do typu użytecznego, chyba że chcesz zadeklarować swój własny typ (i tabelę tego typu) poza pakietem. Możesz to zrobić, aby zrzucić wyniki:

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;

I możesz użyć wyniku wywołania w innej procedurze lub funkcji; po prostu dostanie się do tego poza PL/SQL, co wydaje się trochę trudne.

Zmieniono, aby dodać: Dzięki takiemu podejściu, jeśli jest to procedura, możesz zrobić zasadniczo to samo:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zatrzymaj się przy błędzie kompilacji w skrypcie sqlplus

  2. Różnica między notacją Oracle plus (+) a notacją ansi JOIN?

  3. Korzystanie z Oracle EXPAND_SQL_TEXT

  4. pobierz nazwę tabeli z kolumny dla klauzuli from

  5. Łączenie się z bazą danych Oracle przez C#?