2009-06-25 4 views
1

У меня есть база данных оракула, в которой у меня есть доступ только для чтения (без разрешения на создание временных таблиц). У меня есть список выбора (в Excel) из 28000 идентификаторов, соответствующих 28000 строк в таблице, в которой есть миллионы записей. Как написать запрос для возврата 28000 строк?Запрос Oracle с списком выбора

Я попытался создать таблицу в доступе и выполнить соединение через ODBC, но Access замерзает/принимает невероятное долгое время. Должен ли я создать запрос с 28 000 элементов в инструкции IN?

Есть ли что-нибудь в PL/SQL, что упростит?

Благодарим вас за внимание и помощь.

-JC

ответ

0

Максимальное число переменных для IN (.., .. ,,) тип запроса 1000 в Oracle 10g.

+0

Хорошо знать, спасибо! –

3

Что делает ваши 28 000 рядов особенными?

Есть ли другое поле в записях, которое вы можете использовать, чтобы ограничить запрос в предложении WHERE (или, по крайней мере, немного сократить миллионы строк)? Возможно, идентификаторы, которые вас интересуют, попадают в определенный диапазон?

+0

Идентификаторы на самом деле представляют собой комбинацию номера телефона и времени. Это в значительной степени делает уникальную строку. –

+2

Я считаю, что Грэм задает вопрос о том, что отличает ваши 28 000 строк от миллионов строк в таблице, которые вам не интересны. Можете ли вы разработать запрос, который найдет те 28 000 строк, которые не включают 28 отдельных списков IN из 1000 литералов кусок? –

+0

+1, ударяет ноготь по голове. Если вы не можете ответить на этот вопрос, вы попадаете в одно из болезненных решений, которое дали другие. – DCookie

0

Попробуйте создать индекс на таблице, созданной в Access.

0

Это болезненное условие для того, чтобы быть внутри. Одним из способов является создание представления, содержащего все идентификаторы, а затем присоединиться к нему.

Приведенный ниже пример Oracle.

WITH 
ids AS 
(
    SELECT 314 ID FROM DUAL UNION ALL 
    SELECT 159 ID FROM DUAL UNION ALL 
    SELECT 265 ID FROM DUAL 
) 
SELECT VALUE1, VALUE2 
FROM SOME_TABLE, ids 
WHERE SOME_TABLE.ID = ids.ID 

Это в основном включает в себя все 28000 идентификаторов, в статье с, что позволяет сделать соединение, без фактического создания таблицы.

Уродливый, но он должен работать.

0

Лучший способ сделать это описано здесь: How to put more than 1000 values into an Oracle IN clause

+0

Трудно делать, когда у вас нет доступа на запись в базу данных. – EvilTeach

+0

Почему? Ничего не написано в db! – Theo

+0

К сожалению, у меня нет доступа к созданию временных таблиц :( –