Лучше, чем создавать кучу таблиц, создать одну таблицу, которая показывает все записи.Например,
CREATE TABLE so_dir_ext
( ... your external table columns ...)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY ... your directory, created with CREATE DIRECTORY command ...
ACCESS PARAMETERS (
... your access oracle loader parameters
... optional: PREPROCESSOR directive, see below ...
)
LOCATION ('yourfilenameprefix*.yourfilenameext')
)
;
Если вам нужно знать, из какого файла пришла каждая запись (а вы не можете определить по данным), вы можете использовать PREPROCESSOR
и сценарий оболочки на вашем сервере, чтобы предварять егокаждая строка перед загрузкой.Посмотрите на этот характерно превосходный ответ Алекса Пула о том, как это сделать здесь .
Другой альтернативой, если вам не нужен препроцессор, было бы иметь еще одну внешнюю таблицу, нодинамически изменяйте имя файла таблицы перед тем, как читать каждый файл.Например,
FOR r IN ( SELECT filename FROM list_of_files_you_will_need_to_get_somehow ) LOOP
EXECUTE IMMEDIATE 'alter table your_ext_table location (''' || r.filename || ''')';
SELECT ... FROM your_ext_table...
END LOOP;