Можно ли использовать имя таблицы в качестве имени файла при загрузке файла Oracle? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть вызов в моем текущем проекте.Где мне нужно создать таблицу из файла (fileone.txt). Имя таблицы должно совпадать с именем файла без расширения.Как это может быть достигнуто

Я думал о sqlloader, UTL, внешних таблицах.Ни у одного из них нет вышеуказанного параметра

Ожидаемый результат: имя таблицы должно совпадать с именем файла без расширения

1 Ответ

2 голосов
/ 20 сентября 2019

Лучше, чем создавать кучу таблиц, создать одну таблицу, которая показывает все записи.Например,

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;
...