【问题标题】:Oracle external tables - Specifying dynamic filenameOracle 外部表 - 指定动态文件名
【发布时间】:2012-02-23 04:54:52
【问题描述】:
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是一个oracle目录,指向/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 命令。

还有其他可能吗?

谢谢

【问题讨论】:

    标签: database oracle logging plsql oracle10g


    【解决方案1】:

    很遗憾你运行的是 10g。在 11g 上,我们可以将预处理器脚本(shell 脚本)与外部表相关联。在你的情况下,你可以运行一个脚本来找出最新的文件,然后发出一个复制命令。比如:

     cp logadm_15012012.log logadm
    

    阿德里安·比灵顿(Adrian Billington)在博客中提到了 this feature here。坦率地说,他的文章比 the official docs 更有帮助。

    但是当您使用 10g 时,您所能做的就是运行 ALTER TABLE 语句,或使用计划作业(cron 或其他)来同步具有通用名称的新文件。

    【讨论】:

    • 感谢我更新了一个存储过程(它使用表)来更新文件名,因为它每天都在运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多