Внешние таблицы Oracle - указание динамического имени файла - PullRequest
7 голосов
/ 31 января 2012
CREATE TABLE LOG_FILES (
        LOG_DTM VARCHAR(18),
    LOG_TXT VARCHAR(300)
   )
 ORGANIZATION EXTERNAL(
   TYPE ORACLE_LOADER
   DEFAULT DIRECTORY LOG_DIR
   ACCESS PARAMETERS(
      RECORDS  DELIMITED BY NEWLINE
      FIELDS(
        LOG_DTM position(1:18),
        LOG_TXT position(19:300)
      )
   )
   LOCATION('logadm'))
)
REJECT LIMIT UNLIMITED
/

LOG_DIR - это каталог оракула, который указывает на /u/logs/

Проблема в том, что содержимое /u/logs/ выглядит следующим образом

logadm_12012012.log
logadm_13012012.log
logadm_14012012.log
logadm_15012012.log

Есть ли способ, которым я могу указать местоположение файла динамически? т.е. каждый раз, когда я запускаю Select * from LOG_FILES, он должен использовать файл журнала дня. (например, log_adm_DDMMYYYYY).

Я знаю, что могу использовать alter table log_files location ('logadm_15012012.log'), но я бы не хотел выдавать команду alter.

Есть ли другие возможности?

Спасибо

1 Ответ

6 голосов
/ 31 января 2012

Обидно, что вы бежите 10g.На 11g мы можем связать скрипт препроцессора - скрипт оболочки - с внешней таблицей.В вашем случае вы можете запустить скрипт, который определит последний файл, а затем выдаст команду копирования.Примерно так:

 cp logadm_15012012.log logadm

Адриан Биллингтон опубликовал в блоге о этой функции здесь .Честно говоря, его рецензия более полезна, чем официальные документы .

Но если вы набираете 10g, все, что вы можете сделать, - это запустить инструкцию ALTER TABLE или использовать запланированное задание (cron или что угодно) для синхронизации нового файла с общим именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...