Если вы столкнулись с этой проблемой, и удаление подзапросов из ваших SQL-сценариев не вариант для вас, я предлагаю вам использовать решение Zsuetams и использовать:
alter session set optimizer_features_enable='11.1.0.7';
Возможно, вы даже захотите изменить системунастройки вашего экземпляра Oracle, чтобы этот параметр оптимизатора автоматически оставался в силе для всех сеансов, пока база данных смонтирована, выполнив:
alter system set optimizer_features_enable='11.1.0.7' scope=both;
как пользователь с системными привилегиями ALTER SYSTEM (например, пользователь SYS).
Если вы боитесь каких-либо побочных эффектов такого развертывания в масштабе всей системы, например, у вас работает кластер, и вы боитесь, что изменение параметров системы экземпляра Oracle может повлиять и на другие стороны (и повторное тестирование неt разумно)… Тогда ваш контейнер приложения может прийти на помощь, предоставив какой-то способ расширить конфигурацию своего ресурса JNDI DataSource с помощью некоторых операторов инициализации sql.Затем фабрика соединений будет выполнять эти операторы один раз при создании соединений с этим источником данных.
Если вы, например, используете Tomcat 7, используйте параметр initConnectionSqls :
<Resource name="application.datasource" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
[...]
initConnectionSqls="alter session set optimizer_features_enable='11.1.0.7'" />
ПРИМЕЧАНИЕ : Если вы используете DBCP> = 1.3.1 / 1.4.1 (еще не выпущено), вам, вероятно, уже придется использовать параметр "connectionInitSqls" вместо "initConnectionSqls" в качестве версий 1.3и 1.4 DBCP неправильно использует "initConnectionSqls" в качестве имени этого свойства для конфигурации фабрики объектов JNDI.
Посмотрите Apache Tomcat 7 - HN-TO ресурсы JNDI и Apache Commons - Конфигурация пула соединений с базой данных для получения дополнительной информации об этом.
Да, и наконец: еще лучшим решением может быть, в конце концов, обновление до Oracle 11g версии 11.2.0.2.0; -)