2012-01-31 15 views
7
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 olsa /u/logs/Oracle dış tablolar -

sorun işaret eden bir kahin dizinidir dinamik dosya ismi belirtmek herhangi bir yolu var mı /u/logs/ içeriği bu

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

benziyor olmasıdır i Dosyanın konumunu dinamik olarak belirtebilir miyim? yani, Select * from LOG_FILES'u her çalıştırdığımda, günün günlük dosyasını kullanmalıdır. (ör. log_adm_DDMMYYYYY).

alter table log_files location ('logadm_15012012.log')'u kullanabileceğimi biliyorum ancak alter komutunu vermek zorunda kalmak istemiyorum.

Diğer olanaklar nelerdir?

Teşekkürler

cevap

6

10 g çalıştırdığınız için utanç verici. 11g'de bir ön işlemcili betiği - bir kabuk betiği - harici bir tabloyla ilişkilendirebiliriz. Sizin durumunuzda, en son dosyayı belirleyen ve daha sonra bir kopya komutu veren bir betik çalıştırabilirsiniz. gibi bir şey:

cp logadm_15012012.log logadm 

Adrian Billington yaklaşık this feature here blogged. Açıkçası, onun yazımı, the official docs'dan daha yararlıdır.

Ama yapabileceğiniz tek şey 10g olduğun gibi ALTER TABLE deyimini çalıştırabilir veya yeni bir dosyayı genel adla eşitlemek için zamanlanmış bir işi (cron veya her neyse) kullanabilirsiniz.

+0

Her gün çalıştığından, dosya adını güncellemek için saklı yordamlardan birini (tabloyu kullanan) güncellediğim için teşekkürler. – ziggy