Oracle
 sql >> Database >  >> RDS >> Oracle

Quando un SQL corretto produrrà un risultato errato

Una cosa che puoi fare è applicare il suggerimento NO_QUERY_TRANSFORMATION introdotto in Oracle 10g.

Se questo produce il risultato desiderato, sai che stai affrontando un bug Oracle, poiché nessun suggerimento dovrebbe cambiare il risultato effettivo di una query.

Allo stesso tempo potresti aver risolto il tuo problema, tranne per il fatto che forse il tuo piano di esecuzione non sarà soddisfacente.

Il bug che stai affrontando (non so se è un bug noto) è che l'ottimizzatore Oracle potrebbe non interpretare correttamente l'intento della query originale durante la trasformazione della query per un migliore piano di esecuzione (unisci viste ecc.). Usando il suggerimento, chiedi all'ottimizzatore di non farlo.

Il fenomeno si verifica più spesso con query complesse che coinvolgono visualizzazioni di prestazioni in linea.

Attualmente non ho esempi di codice per riprodurre questo problema ma ci sto lavorando.

AGGIORNAMENTO:sembra che questo in effetti sia lo scopo del suggerimento - ho trovato questo:

documentazione .