Database Oracle外部表-指定动态文件名
LOG\u DIR是一个oracle目录,指向Database Oracle外部表-指定动态文件名,database,oracle,logging,plsql,oracle10g,Database,Oracle,Logging,Plsql,Oracle10g,LOG\u DIR是一个oracle目录,指向/u/logs/ 但问题是/u/logs/的内容如下所示 CREATE TABLE LOG_FILES ( LOG_DTM VARCHAR(18), LOG_TXT VARCHAR(300) ) ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER DEFAULT DIRECTORY LOG_DIR ACCESS PARAMETERS( RECORDS DE
/u/logs/
但问题是/u/logs/
的内容如下所示
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
/
是否有任何方法可以动态指定文件的位置?i、 e.每次我运行Select*from LOG_FILES
时,它都应该使用当天的日志文件。(例如,log_adm_ddmmyyyy)
我知道我可以使用alter table log\u files location('logadm\u 15012012.log')
,但我不想发出alter命令
还有其他的可能性吗
谢谢很遗憾您运行的是10g。在11g上,我们可以将预处理器脚本(shell脚本)与外部表相关联。在您的情况下,您可以运行一个脚本,找出最新的文件,然后发出复制命令。比如:
logadm_12012012.log
logadm_13012012.log
logadm_14012012.log
logadm_15012012.log
阿德里安·比林顿在博客上写过。坦率地说,他的文章比我的文章更有帮助
但是,当您使用10g时,您所能做的就是运行ALTER TABLE语句,或者使用计划作业(
cron
或其他任何内容)将新文件与通用名称同步 谢谢,我已经更新了一个存储过程(使用该表)来更新文件名,因为它每天都在运行。
cp logadm_15012012.log logadm