Почему ограничение рабочего запроса WHERE ROWNUM <=10 приводит к ошибке из EXPLAIN PLAN "ORA-12899: значение слишком велико для столбца"?
Я выполняю этот запрос и объясняю план в Responsys.
План объяснения для этого запроса работает нормально и возвращает около 70 строк данных подсчета:
select * from ( Select LOCATION, count(LOCATION) COUNT_LOCATION From TABLE Group By LOCATION Order By COUNT_LOCATION Desc )
Но добавьте ограничение строки WHERE ROWNUM <= 10
пункт в конце:
select * from ( Select LOCATION, count(LOCATION) COUNT_LOCATION From TABLE Group By LOCATION Order By COUNT_LOCATION Desc ) WHERE ROWNUM <= 10
И эта ошибка в результатах плана объяснения:
Ошибка: java.sql.SQLException: ORA-00604: ошибка произошла на уровне рекурсивного SQL 1 ORA-12899: слишком большое значение для столбца "ACME_CUST"."PLAN_TABLE"."OPTIONS" (фактическое: 33, максимальное: 30): объяснить план set Statement_id ='ACME_CUST:1550184818627' в acme_CUST.PLAN_TABLE для выбора * из (Выберите LOCATION, count(LOCATION) COUNT_LOCATION Из TABLE Сгруппировать по LOCATION Порядок по COUNT_LOCATION Desc) WHERE ROWNUM <= 10
Результаты, которые я ищу, это всего лишь 10 лучших строк для LOCATION.
0 ответов
Попробуйте использовать ROW_NUMBER() для сортировки. Я думаю, что это из-за комбинации GROUP BY/ORDER BY в сочетании с ROWNUM:
выберите * из (Выберите LOCATION, count(LOCATION), COUNT_LOCATION, ROW_NUMBER() OVER (ORDER BY COUNT_LOCATION GROUP BY LOCATION Desc) RowNumbers из TABLE Сгруппировать по LOCATION Сортировать по COUNT_LOCATION Desc) WHERE RowNumbers <= 10
См. Эту статью для других форм: Как правильно использовать Oracle ORDER BY и ROWNUM?