ROWNUM
je nejbezpečnější způsob, jak zabránit transformacím optimalizátoru a zajistit bezpečnost typu. Pomocí ROWNUM
přiměje společnost Oracle, aby si myslela, že na pořadí řádků záleží, a zabraňuje věcem, jako je vkládání predikátů a slučování pohledů.
select *
from
(
select id, value, rownum --Add ROWNUM for type safety.
from eav
where attr like 'sal%'
)
where to_number(value) > 5000;
Existují i jiné způsoby, jak to udělat, ale žádný z nich není spolehlivý. Neobtěžujte se jednoduchými vloženými pohledy, běžnými tabulkovými výrazy, CASE
, predikátové řazení nebo rady. Tyto běžné metody nejsou spolehlivé a viděl jsem, že všechny selhaly.
Nejlepším dlouhodobým řešením je změnit tabulku EAV tak, aby měla pro každý typ jiný sloupec, jak popisuji v tuto odpověď . Opravte to hned, nebo budoucí vývojáři budou proklínat vaše jméno, když budou muset psát složité dotazy, aby se vyhnuli chybám typu.