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

Bagaimana cara mengembalikan resultet/kursor dari blok anonim Oracle PL/SQL yang menjalankan SQL Dinamis?

Anda dapat menulis fungsi PL/SQL untuk mengembalikan kursor itu (atau Anda dapat meletakkan fungsi itu dalam sebuah paket jika Anda memiliki lebih banyak kode yang terkait dengan ini):

CREATE OR REPLACE FUNCTION get_allitems
  RETURN SYS_REFCURSOR
AS
  my_cursor SYS_REFCURSOR;
BEGIN
  OPEN my_cursor FOR SELECT * FROM allitems;
  RETURN my_cursor;
END get_allitems;

Ini akan mengembalikan kursor.

Pastikan untuk tidak memasukkan SELECT -String menjadi tanda kutip dalam PL/SQL bila memungkinkan. Memasukkannya ke dalam string berarti tidak dapat diperiksa pada waktu kompilasi, dan harus diurai setiap kali Anda menggunakannya.

Jika Anda benar-benar perlu menggunakan SQL dinamis, Anda dapat menempatkan kueri Anda dalam tanda kutip tunggal:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

String ini harus diurai setiap kali fungsi dipanggil, yang biasanya akan lebih lambat dan menyembunyikan kesalahan dalam kueri Anda hingga waktu proses.

Pastikan untuk menggunakan variabel-bind jika memungkinkan untuk menghindari penguraian yang sulit:

  OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. buat fungsi khusus untuk perbedaan tanggal tidak termasuk akhir pekan dan hari libur di Oracle sql

  2. Perbedaan Oracle antara NVL dan Coalesce

  3. Oracle:Memperbarui kolom tabel menggunakan ROWNUM bersama dengan klausa ORDER BY

  4. Pertanyaan bergabung SQL

  5. JDBC - Oracle ArrayIndexOutOfBoundsException