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

Bagaimana cara menangani parameter opsional dalam kueri SQL?

Ya, menggunakan salah satu dari berikut ini:

WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);

... tidak sargable. Mereka akan bekerja, tetapi melakukan yang terburuk dari opsi yang tersedia.

Jika Anda hanya memiliki satu parameter, IF/ELSE dan pernyataan khusus yang terpisah adalah alternatif yang lebih baik.

Opsi selanjutnya setelah itu adalah SQL dinamis. Tetapi pengkodean SQL dinamis tidak berguna jika Anda membawa predikat non-sargable pada contoh pertama. SQL Dinamis memungkinkan Anda untuk menyesuaikan kueri sambil mengakomodasi banyak jalur. Tapi itu juga berisiko injeksi SQL, jadi itu harus dilakukan di belakang kueri berparameter (sebaiknya di dalam prosedur/fungsi tersimpan dalam paket.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah perbandingan string Oracle PL/SQL

  2. Jalankan Prosedur Tersimpan di Pengembang SQL?

  3. Apakah ada jenis cap waktu modifikasi otomatis untuk kolom Oracle?

  4. Basis Data:Fungsi Pipeline

  5. Membuat pemicu di Oracle Express