2011-12-20 2 views
1

У меня есть длинный список выбора для использования в выберите в пункте в БД Oracle, и это дает мне ошибку о том,Выберите длинный список параметров в Oracle с использованием см

SP2-0027: Входной слишком длинный (> 2499 символов) - строка игнорируется

Есть ли лучший способ получить эти данные?

Мой запрос что-то вроде этого

select * from clicks where click_id in(''comma seperated list ''); 

разделителей-seperatedlist нечто вроде ('1','2','3','4'.....)

ответ

1

Замените ваш '' запятых списка '' с подзапросом:

select * from clicks where click_id in(SELECT click_id ...); 
1

Заменит список, разделенный запятыми, с инструкцией SubSELECT.

WHERE click_id IN (SELECT id FROM the_interesting_clicks WHERE ...) 

[ORACLE] Может быть, вы хотите GLOBAL TEMPORARY TABLE для таких случаев: их содержание является локальным для транзакции или сеанса (в зависимости от того, как вы заявляете таблицу). Итак: загрузите эту временную таблицу с подготовленным оператором INSERT, который вы вызываете несколько раз, а затем используйте подзапрос.

+0

я не имею права на запись в БД – TopCoder

+0

@TopCoder: Как список идентификаторов построен? Может быть отложено к базе данных? – Benoit

+0

Я получил данные от DW, и я столкнулся с тем же ограничением там – TopCoder

2

Разделить список. НАПРИМЕР,

select * from clicks 
where click_id in ('1','2','3','4') 
or click_id in ('5','6','7','8'); 

т.д.

1

Это ошибка с SQL * Plus, а не SQL. Просто добавьте новую строку где-нибудь до символа 2500. Или выполните инструкцию в другой среде, например SQL Developer.

Подобно тому, что предложила @John Doyle, хотя вам не нужно использовать отдельное условие:

select * from clicks 
where click_id in ('1','2','3','4', 
'5','6','7','8');