SQLLDR: динамическая загрузка полного пути и имени файла - PullRequest
1 голос
/ 22 февраля 2012

Я использую sQLLDER (11g) для загрузки данных в таблицу. Один из столбцов - это большой двоичный объект, который необходимо загрузить из другого файла. Имя файла зависит от поля таблицы, и мне нужно объединить полный путь, чтобы иметь возможность загрузить файл. Таким образом, чтобы получить полный путь к файлу, мне нужно объединить путь к папке «/ oradata / val /» с полем ID_RECOMMENDATION плюс расширение «.dat»; например, если поле ID_RECOMMENDATION имеет значение «1», имя файла должно быть «/oradata/val/1.dat». Я не могу изменить исходный файл, поэтому я хочу использовать выражение, чтобы получить полный путь к файлу, используя что-то вроде этого:

LOAD DATA
INFILE *
INTO TABLE t_val_recommendation append
fields terminated by ';'
(
  ID_RECOMMENDATION,
  ID_PROFILE       ,
  START_DATE       date 'yyyymmdd',
  LOBF_00001       BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')",
  PARAGRAPHS       LOBFILE (LOBF_00001) TERMINATED BY EOF,
  ASSET_ALLOCATION
)

Но, похоже, он не понимает объединение пути и имени файла. Как я могу это сделать?

спасибо

(отредактировано для уточнения значения)

Это схема таблицы:

  ID_RECOMMENDATION  NUMBER(10)                 NOT NULL,             
  ID_PROFILE         VARCHAR2(10 BYTE)          NOT NULL,
  START_DATE         DATE                       NOT NULL,
  PARAGRAPHS         SYS.XMLTYPE,
  ASSET_ALLOCATION   SYS.XMLTYPE

И это будет строка для загрузки:

1;CONSERVATIVE;20120301;<aa>This is my asset allocation</aa>

Ответы [ 2 ]

0 голосов
/ 01 марта 2012
LOBF_00001       BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')"

это кажется мне ошибкой:

  • если это BOUNDFILLER, это означает, что в вашей таблице t_val_recommendation есть столбец NO с именем LOBF_00001, но в разделе данных файла ctl есть данные, что Вы хотите использовать его и сохранить в переменной LOBF_00001, которая может использоваться для вычисления других выражений.
  • если это EXPRESSION, это означает, что - это столбец с именем LOBF_00001 в вашей таблице t_val_recommendation, но в данных есть NO раздел файла CTL.
0 голосов
/ 01 марта 2012

Я не уверен, насколько сложно было бы изменить существующие файлы, которые загружаются в него, но возможно ли изменить эти файлы, чтобы они уже содержали правильный путь к файлу?Возможно, вы могли бы использовать Java или какой-либо другой язык обработки текста, чтобы объединить этот ID_RECOMMENDATION с '/ oradata / val /' & '.dat' и сохранить файл (ы), и тогда это было бы простым изменением для загрузки в ваш файл (ы)) используя ...

LOAD DATA
INFILE *
INTO TABLE t_val_recommendation append
fields terminated by ';'
(
  ID_RECOMMENDATION,
  ID_PROFILE       ,
  START_DATE       date 'yyyymmdd',
  LOBF_00001       FILLER char,
  PARAGRAPHS       LOBFILE (LOBF_00001) TERMINATED BY EOF
)

Доступно много языков, которые легко выучить и которые могут преобразовывать текстовые файлы.Java, Perl & C # - это три, которые приходят на ум, но есть и много других доступных.

Я бы сказал, что настройка ваших текстовых файлов в формате, который будет прост в использовании SQLLDR, будет стоить усилийв долгосрочной перспективе.

...