PERBARUI: Ini diperbaiki di 12.1.0.2.
Ini jelas terlihat seperti bug di 12.1.0.1. Saya akan mendorong Anda untuk membuat permintaan layanan melalui dukungan Oracle. Mereka mungkin dapat menemukan perbaikan atau pekerjaan yang lebih baik. Dan semoga Oracle dapat memperbaikinya di versi mendatang untuk semua orang. Biasanya bagian terburuk tentang bekerja dengan dukungan adalah mereproduksi masalah. Namun karena Anda sudah memiliki kasus uji yang sangat baik, masalah ini mungkin mudah diselesaikan.
Mungkin ada banyak cara untuk mengatasi bug ini. Tetapi sulit untuk mengatakan metode mana yang akan selalu berhasil. Penulisan ulang kueri Anda mungkin berfungsi sekarang, tetapi jika statistik pengoptimal berubah, mungkin rencananya akan berubah kembali di masa mendatang.
Opsi lain yang cocok untuk saya di 12.1.0.1.0 adalah:
ALTER SESSION SET optimizer_features_enable='11.2.0.3';
Namun Anda harus ingat untuk selalu mengubah setelan ini sebelum kueri dijalankan, lalu mengubahnya kembali ke '12.1.0.1' setelahnya. Ada beberapa cara untuk menyematkannya dalam petunjuk kueri, seperti /*+ OPT_PARAM('optimizer_features_enable' '11.2.0.3') */
. Tetapi untuk beberapa alasan itu tidak berfungsi di sini. Atau mungkin Anda dapat menyetelnya untuk sementara waktu untuk seluruh sistem dan mengubahnya kembali setelah perbaikan atau solusi yang lebih baik tersedia.
Solusi apa pun yang Anda gunakan, ingatlah untuk mendokumentasikannya. Jika kueri terlihat aneh, pengembang berikutnya mungkin mencoba "memperbaikinya" dan menemukan masalah yang sama.