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

Bagaimana cara menggunakan Kursor Ref Oracle dari C# ODP.NET sebagai Parameter ReturnValue, tanpa menggunakan Fungsi atau Prosedur Tersimpan?

Saya akan mencoba jawaban alih-alih komentar lain.

Seperti yang saya katakan dalam satu komentar, pernyataan pilih murni/sederhana tidak berfungsi di PL/SQL. Tapi saya salah dalam menyatakan, bahwa Anda memerlukan fungsi tersimpan untuk mengembalikan kursor ref.

Tetapi hal pertama yang pertama:Jenis "id_array" yang Anda nyatakan di blok PL/SQL Anda adalah jenis PL/SQL. Itu tidak dapat digunakan dalam pernyataan pilih kursor ref. Sebagai gantinya, Anda memerlukan tipe SQL:

create type id_array as table of number;

Ini perlu dijalankan hanya sekali, seperti "buat tabel".

Blok PL/SQL Anda akan terlihat seperti ini:

DECLARE
    t_ids   id_array;
BEGIN
    UPDATE WorkerStatus
    SET
         StateId = :StateId
        ,StateReasonId = :StateReasonId
    WHERE
        StateId = :CurrentStateId
    RETURNING Id BULK COLLECT INTO t_Ids;

    OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_Ids as id_array));    
END;

PS:
Saat merakit posting ini, saya menyadari dari mana asalnya ORA-00942. Array t_ids didasarkan pada tipe PL/SQL, yang tidak diketahui/tersedia di sisi SQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metode Pengaturan Parameter NLS dan Prioritasnya (Oracle Database)

  2. Bagaimana Cara Menambahkan Komentar ke Tabel di Oracle SQL Developer?

  3. Blok Injeksi Oracle SQL dengan DBMS_ASSERT

  4. Dalam SQL, apa artinya menggunakan tanda kurung dengan OR?

  5. Melarikan diri dari kutipan tunggal di PLSQL