Опрос Oracle с помощью списка выбора - PullRequest
1 голос
/ 26 июня 2009

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

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

Есть ли в PL / SQL что-нибудь, что облегчит задачу?

Спасибо за ваше время и помощь.

-JC

Ответы [ 5 ]

3 голосов
/ 26 июня 2009

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

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

0 голосов
/ 26 июня 2009

Лучший способ сделать это описан здесь: Как поместить более 1000 значений в предложение Oracle IN

0 голосов
/ 26 июня 2009

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

Пример ниже - 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 идентификаторов в предложении with, позволяя вам выполнить объединение без фактического создания таблицы.

Ужасно, но должно работать.

0 голосов
/ 26 июня 2009

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

0 голосов
/ 26 июня 2009

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

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