sql >> Databáze >  >> RDS >> Oracle

Věštec. Zabránění sloučení poddotazů a podmínek hlavního dotazu

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.



  1. SQLSTATE[23000]:Porušení omezení integrity:1217

  2. PHP PDO Bit(1) vrací nesprávný datový typ

  3. Jak exportovat data pomocí Oracle SQL Developer?

  4. jak zapsat soubor json jako zdroj dat v php?