Oracle外部表 - 指定动态文件名

zig*_*ggy 7 database oracle logging plsql oracle10g

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
/
Run Code Online (Sandbox Code Playgroud)

LOG_DIR是指向的oracle目录 /u/logs/

但问题是内容/u/logs/看起来像这样

logadm_12012012.log
logadm_13012012.log
logadm_14012012.log
logadm_15012012.log
Run Code Online (Sandbox Code Playgroud)

有没有办法可以动态指定文件的位置?即每次运行Select * from LOG_FILES它都应该使用当天的日志文件.(例如log_adm_DDMMYYYYY).

我知道我可以使用,alter table log_files location ('logadm_15012012.log')但我不想发出alter命令.

还有其他可能吗?

谢谢

APC*_*APC 6

你跑10g真是太遗憾了.在11g上,我们可以将预处理器脚本(shell脚本)与外部表相关联.在您的情况下,您可以运行一个脚本,该脚本将找出最新文件,然后发出复制命令.就像是:

 cp logadm_15012012.log logadm
Run Code Online (Sandbox Code Playgroud)

Adrian Billington在发表了关于此功能的博文.坦率地说,他的写作比官方文档更有帮助.

但是当你使用10g时,你可以做的就是运行ALTER TABLE语句,或者使用预定作业(cron或其他)将新文件与通用名称同步.