Почему ограничение рабочего запроса 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?

Другие вопросы по тегам