2012-01-31 10 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 es un directorio de Oracle que apunta a /u/logs/Oracle tablas externas - Especificar nombre de archivo dinámico

embargo, el problema es que el contenido de /u/logs/ ve así

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

¿Hay alguna manera de que me puede especificar la ubicación del archivo de forma dinámica? es decir, cada vez que ejecuto Select * from LOG_FILES, debería usar el archivo de registro del día. (por ejemplo, log_adm_DDMMYYYYY).

Sé que puedo usar alter table log_files location ('logadm_15012012.log') pero me gustaría no tener que emitir el comando alter.

¿Alguna otra posibilidad?

Gracias

Respuesta

6

Es una pena que esté ejecutando 10g. En 11g, podemos asociar un script de preprocesador, un script de shell, con una tabla externa. En su caso, podría ejecutar un script que averiguaría el último archivo y luego emitiría un comando de copia. Algo así como:

cp logadm_15012012.log logadm 

Adrian Billington ha blogs sobre this feature here. Francamente, su relato es más útil que the official docs.

Pero como está en 10g, todo lo que puede hacer es ejecutar la instrucción ALTER TABLE o utilizar un trabajo programado (cron o lo que sea) para sincronizar un nuevo archivo con el nombre genérico.

+0

Gracias he actualizado uno de los procedimientos almacenados (que usa la tabla) para actualizar el nombre del archivo ya que también se ejecuta todos los días. – ziggy

Cuestiones relacionadas