#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>