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

menggunakan nilai yang dipisahkan koma di dalam klausa IN untuk kolom NUMBER

Apakah Anda benar-benar perlu mengembalikan daftar yang dipisahkan koma? Biasanya akan jauh lebih baik untuk mendeklarasikan tipe koleksi

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Deklarasikan fungsi yang mengembalikan instance dari koleksi ini

CREATE OR REPLACE FUNCTION get_nums
  RETURN num_table
IS
  l_nums num_table := num_table();
BEGIN
  for i in 1 .. 10
  loop
    l_nums.extend;
    l_nums(i) := i*2;
  end loop;
END;

lalu gunakan koleksi itu dalam kueri Anda

SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

Dimungkinkan untuk menggunakan SQL dinamis juga (yang ditunjukkan oleh @Sebas). Kelemahannya, bagaimanapun, adalah bahwa setiap panggilan ke prosedur akan menghasilkan pernyataan SQL baru yang perlu diuraikan lagi sebelum dieksekusi. Ini juga memberi tekanan pada cache perpustakaan yang dapat menyebabkan Oracle menghapus banyak pernyataan SQL lain yang dapat digunakan kembali yang dapat menciptakan banyak masalah kinerja lainnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversikan tanggal String ISO-8601 ke tipe data stempel waktu Oracle

  2. ORA-12519 TNS:tidak ditemukan penangan layanan yang sesuai

  3. Apa arti tanda (+) dalam klausa Oracle SQL WHERE?

  4. Oracle menemukan kendala

  5. 3 Cara Memformat Angka menjadi 2 Tempat Desimal di Oracle