Oracle
 sql >> Base de données >  >> RDS >> Oracle

La requête comportant des jointures externes se comporte différemment dans Oracle 12c

MISE À JOUR : Ceci est corrigé dans 12.1.0.2.

Cela ressemble définitivement à un bogue dans 12.1.0.1. Je vous encourage à créer une demande de service via le support Oracle. Ils pourraient être en mesure de trouver une solution ou une meilleure solution. Et j'espère qu'Oracle pourra le réparer dans une future version pour tout le monde. Normalement, le pire dans le travail avec le support est de reproduire le problème. Mais comme vous disposez déjà d'un très bon cas de test, ce problème peut être facile à résoudre.

Il existe probablement de nombreuses façons de contourner ce bogue. Mais il est difficile de dire quelle méthode fonctionnera toujours. La réécriture de votre requête peut fonctionner maintenant, mais si les statistiques de l'optimiseur changent, le plan sera peut-être modifié à l'avenir.

Une autre option qui fonctionne pour moi sur 12.1.0.1.0 est :

ALTER SESSION SET optimizer_features_enable='11.2.0.3';

Mais vous devez vous rappeler de toujours modifier ce paramètre avant l'exécution de la requête, puis de le redéfinir sur "12.1.0.1" après. Il existe des moyens d'intégrer cela dans un indice de requête, comme /*+ OPT_PARAM('optimizer_features_enable' '11.2.0.3') */ . Mais pour une raison quelconque, cela ne fonctionne pas ici. Ou peut-être pouvez-vous temporairement définir cela pour l'ensemble du système et le modifier après qu'un correctif ou une meilleure solution soit disponible.

Quelle que soit la solution que vous utilisez, n'oubliez pas de la documenter. Si une requête semble étrange, le développeur suivant peut essayer de la "réparer" et rencontrer le même problème.