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

La query con outer join si comporta in modo diverso in Oracle 12c

AGGIORNAMENTO: Questo è stato risolto in 12.1.0.2.

Questo sembra decisamente un bug in 12.1.0.1. Ti incoraggio a creare una richiesta di servizio tramite il supporto Oracle. Potrebbero essere in grado di trovare una soluzione o una soluzione migliore. E si spera che Oracle possa risolverlo in una versione futura per tutti. Normalmente la parte peggiore di lavorare con il supporto è riprodurre il problema. Ma dal momento che hai già un ottimo test case, questo problema potrebbe essere facile da risolvere.

Ci sono probabilmente molti modi per aggirare questo bug. Ma è difficile dire quale metodo funzionerà sempre. La riscrittura della query potrebbe funzionare ora, ma se le statistiche dell'ottimizzatore cambiano, forse il piano cambierà nuovamente in futuro.

Un'altra opzione che funziona per me su 12.1.0.1.0 è:

ALTER SESSION SET optimizer_features_enable='11.2.0.3';

Ma dovresti ricordare di modificare sempre questa impostazione prima dell'esecuzione della query, quindi ripristinarla in "12.1.0.1" dopo. Esistono modi per incorporarlo all'interno di un suggerimento per la query, come /*+ OPT_PARAM('optimizer_features_enable' '11.2.0.3') */ . Ma per qualche ragione che non funziona qui. O forse puoi impostarlo temporaneamente per l'intero sistema e cambiarlo di nuovo dopo che è disponibile una correzione o una soluzione migliore.

Qualunque sia la soluzione che utilizzi, ricordati di documentarla. Se una query sembra strana, lo sviluppatore successivo potrebbe provare a "correggerla" e riscontrare lo stesso problema.