Поиск данных в таблице Oracle (12.1) с использованием ключей из текстового файла

#join #text #oracle-sqldeveloper

#Присоединиться #текст #oracle-sqldeveloper

Вопрос:

У меня есть таблица с примерно 8 миллионами строк в ней. У него есть ограничение уникальности для столбца с именем Customer_Identifier. Это поле varchar (10), не является первичным ключом, но уникально.

Я хочу извлечь некоторые строки customer из этой таблицы с помощью SQL Developer. Мне был предоставлен текстовый файл, каждая запись которого содержит значение ключа поиска в столбцах 1-10. Этот запрос потребуется повторно использовать несколько раз с разными значениями customer_identifier. Иногда мне присваивается несколько значений customer_identifier (их менее 1000). Иногда их много (от 1000 до 10000). В тех случаях, когда мне требуется меньше 1000 значений, довольно просто использовать предложение IN . Я могу отредактировать текстовый файл, чтобы заключить ключи в кавычки и вставить соответствующие запятые. Но SQL developer имеет жесткое ограничение в 1000 значений в предложении IN.

У меня есть только права на чтение базы данных, поэтому о создании новой физической таблицы и управлении ею не может быть и речи :-(.

Есть ли способ, которым я могу обработать текстовый файл как таблицу в Oracle 12.1 и, таким образом, использовать его для объединения с моей таблицей customer в столбце customer_identifier?

Brgds Крис

Ответ №1:

Да, вы можете обрабатывать текстовый файл как внешнюю таблицу. Но вам может потребоваться помощь администратора базы данных для создания нового каталога, если у вас нет доступа к каталогу, определенному в базе данных.

Благодаря Oracle Base

 **Create a directory object pointing to the location of the files.**

CREATE OR REPLACE DIRECTORY ext_tab_data AS '/data';

**Create the external table using the CREATE TABLE..ORGANIZATION EXTERNAL syntax. This defines the metadata for the table describing how it should appear and how the data is loaded.**

CREATE TABLE countries_ext (
  country_code      VARCHAR2(5),
  country_name      VARCHAR2(50),
  country_language  VARCHAR2(50)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY ext_tab_data
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ','
    MISSING FIELD VALUES ARE NULL
    (
      country_code      CHAR(5),
      country_name      CHAR(50),
      country_language  CHAR(50)
    )
  )
  LOCATION ('Countries1.txt','Countries2.txt')
)
PARALLEL 5
REJECT LIMIT UNLIMITED;

**Once the external table created, it can be queried like a regular table.**

SQL> SELECT *
  2  FROM   countries_ext
  3  ORDER BY country_name;

COUNT COUNTRY_NAME                 COUNTRY_LANGUAGE
----- ---------------------------- -----------------------------
ENG   England                      English
FRA   France                       French
GER   Germany                      German
IRE   Ireland                      English
SCO   Scotland                     English
USA   Unites States of America     English
WAL   Wales                        Welsh

7 rows selected.

SQL>