ROWNUM
adalah cara teraman untuk mencegah transformasi pengoptimal dan memastikan keamanan tipe. Menggunakan ROWNUM
membuat Oracle menganggap urutan baris itu penting, dan mencegah hal-hal seperti mendorong predikat dan melihat penggabungan.
select *
from
(
select id, value, rownum --Add ROWNUM for type safety.
from eav
where attr like 'sal%'
)
where to_number(value) > 5000;
Ada cara lain untuk melakukan ini tetapi tidak ada yang dapat diandalkan. Jangan repot-repot dengan tampilan sebaris sederhana, ekspresi tabel umum, CASE
, urutan predikat, atau petunjuk. Metode umum tersebut tidak dapat diandalkan dan saya telah melihat semuanya gagal.
Solusi jangka panjang terbaik adalah mengubah tabel EAV agar memiliki kolom yang berbeda untuk setiap jenis, seperti yang saya jelaskan di jawaban ini . Perbaiki ini sekarang atau pengembang masa depan akan mengutuk nama Anda ketika mereka harus menulis kueri yang rumit untuk menghindari kesalahan ketik.