Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana Anda mendapatkan hasil yang diformat dengan baik dari prosedur Oracle yang mengembalikan kursor referensi?

Jika GetQuestions adalah fungsi yang mengembalikan refkursor, yang tampaknya seperti yang Anda miliki dalam versi SQL Server, maka Anda mungkin dapat melakukan sesuatu seperti ini:

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

Atau jika Anda membutuhkannya di blok PL/SQL maka Anda dapat menggunakan pilihan yang sama di kursor.

Anda juga dapat memiliki fungsi yang menghasilkan dbms_output sebagai gantinya sehingga mereka selalu tersedia untuk debugging, meskipun itu menambahkan sedikit overhead.

Sunting

Hmmm, tidak yakin itu mungkin untuk cast() refkursor yang dikembalikan ke tipe yang dapat digunakan, kecuali jika Anda bersedia mendeklarasikan tipe Anda sendiri (dan tabel dari tipe itu) di luar paket. Anda dapat melakukan ini, hanya untuk membuang hasilnya:

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;

Dan Anda dapat menggunakan hasil panggilan dalam prosedur atau fungsi lain; hanya untuk melakukannya di luar PL/SQL yang tampaknya sedikit rumit.

Diedit untuk menambahkan: Dengan pendekatan ini, jika ini adalah prosedur, pada dasarnya Anda dapat melakukan hal yang sama:

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. Melarikan diri dari karakter kontrol di Oracle XDB

  2. Simulasi OLAP

  3. PL/SQL:Kesalahan PLS-00306:nomor atau jenis argumen yang salah saat dipanggil untuk dipicu untuk tabel angka

  4. Memuat data dari file teks ke tabel di oracle

  5. PL/SQL:bagaimana cara meminta input pengguna dalam suatu prosedur?