У меня есть файл, содержащий список 5000 идентификаторов записей в таблице.sqlplus, слишком длинный ввод, когда SELECT длинным списком id
Пример: id_list.txt
('12345', '23456', '34567', ..., '65432')
Я хочу, чтобы выбрать записи, используя следующую команду в Linux:
id_list=`cat id_list.txt`
sqlplus -s user/[email protected] <<END
select company_name, company_status, count(*)
from printing_request
where request_id in ${id_list}
group by company_name, company_status;
END
Чтобы объяснить, таблица printing_request
где многие компании могут отправить много запросов на печать их документов. Если запрос будет завершен, его статус будет изменен с I
на C
.
Я ожидаю, что выход был что-то вроде этого
company_name | company_status | count
AA | I | 1000
AA | C | 1234
BB | I | 2334
...
Но я получил ошибку Input is too long (> 2499 characters)
Не-решение, которое я могу думать только о том, чтобы разбить на ID_LIST на множество списков и петли для выбора много раз. Но когда я думаю о том, сколько циклов он должен выполнить, и как мне в итоге придется делать группировку и подсчитывать вручную после этого, я отказываюсь от этого решения.
В Oracle SQL, 'IN' список констант допускается иметь только 1000 элементов. Поэтому, даже если вы решите текущую проблему, вы столкнетесь с лимитом SQL. Этот файл находится на сервере базы данных? Если да, можете ли вы создать внешнюю таблицу поверх нее? Если нет, можете ли вы использовать SQL * Loader для загрузки идентификаторов в таблицу на сервере, которую вы указываете в инструкции 'SELECT'? –
Я спрашиваю своего руководителя о SQL * Loader и, что удивительно, она дала мне код для загрузки моих данных во вновь созданную временную таблицу. Большое спасибо. – asinkxcoswt