Почему ограничение рабочего запроса WHERE ROWNUM <= 10 приводит к ошибке из EXPLAIN PLAN "ORA-12899: значение слишком велико для столбца"? - PullRequest
0 голосов
/ 15 февраля 2019

Я выполняю этот запрос и объясняю план в 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): объяснить план, устанавливающий Statement_id = 'ACME_CUST: 1550184818627' в acme_CUST.PLAN_TABLE дляselect * from (Выберите LOCATION, count (LOCATION) COUNT_LOCATION Из TABLE Сгруппировать по LOCATION Порядок по COUNT_LOCATION Desc) WHERE ROWNUM <= 10 </p>

Результаты, которые я ищу, - это всего лишь 10 первых рядов дляМЕСТОНАХОЖДЕНИЕ.

1 Ответ

0 голосов
/ 09 апреля 2019

Попробуйте использовать ROW_NUMBER () для сортировки.Я думаю, что это из-за комбинации GROUP BY / ORDER BY в сочетании с ROWNUM:

select * from (Выберите LOCATION, count (LOCATION), COUNT_LOCATION, ROW_NUMBER () OVER (ORDER BY COUNT_LOCATION GROUP BYLOCATION Desc) RowNumbers из TABLE Group By LOCATION Order By COUNT_LOCATION Desc) WHERE RowNumbers <= 10 </p>

См. Эту статью для других форм: Как правильно использовать Oracle ORDER BY и ROWNUM?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...