AKTUALIZACJA: Zostało to naprawione w 12.1.0.2.
To zdecydowanie wygląda na błąd w 12.1.0.1. Zachęcam do utworzenia zgłoszenia serwisowego poprzez wsparcie Oracle. Mogą być w stanie znaleźć rozwiązanie lub lepsze obejście. I miejmy nadzieję, że Oracle może to naprawić w przyszłej wersji dla wszystkich. Zwykle najgorszą częścią pracy z pomocą techniczną jest odtworzenie problemu. Ale ponieważ masz już bardzo dobry przypadek testowy, ten problem może być łatwy do rozwiązania.
Prawdopodobnie istnieje wiele sposobów obejścia tego błędu. Ale trudno powiedzieć, która metoda zawsze będzie działać. Przepisanie zapytania może działać teraz, ale jeśli statystyki optymalizatora ulegną zmianie, być może plan zmieni się w przyszłości.
Inną opcją, która działa dla mnie w wersji 12.1.0.1.0 jest:
ALTER SESSION SET optimizer_features_enable='11.2.0.3';
Musisz jednak pamiętać, aby zawsze zmieniać to ustawienie przed uruchomieniem zapytania, a następnie zmienić je z powrotem na „12.1.0.1”. Istnieją sposoby osadzenia tego we wskazówce zapytania, takie jak /*+ OPT_PARAM('optimizer_features_enable' '11.2.0.3') */
. Ale z jakiegoś powodu to nie działa tutaj. A może możesz tymczasowo ustawić to dla całego systemu i zmienić go z powrotem, gdy dostępna będzie poprawka lub lepsze obejście.
Bez względu na to, z jakiego rozwiązania korzystasz, pamiętaj, aby to udokumentować. Jeśli zapytanie wygląda dziwnie, następny programista może spróbować je „naprawić” i napotkać ten sam problem.