ROWNUM
är det säkraste sättet att förhindra optimeringstransformationer och säkerställa typsäkerhet. Använder ROWNUM
får Oracle att tro att radordningen spelar roll, och förhindrar saker som predikat-pushing och view-fusion.
select *
from
(
select id, value, rownum --Add ROWNUM for type safety.
from eav
where attr like 'sal%'
)
where to_number(value) > 5000;
Det finns andra sätt att göra detta men inget av dem är pålitligt. Bry dig inte om enkla inline-vyer, vanliga tabelluttryck, CASE
, predikatordning eller tips. Dessa vanliga metoder är inte tillförlitliga och jag har sett dem alla misslyckas.
Den bästa långsiktiga lösningen är att ändra EAV-tabellen så att den har en annan kolumn för varje typ, som jag beskriver i det här svaret . Åtgärda detta nu, annars kommer framtida utvecklare att förbanna ditt namn när de måste skriva komplexa frågor för att undvika typfel.