Oracle Database 18c.png

Tablas Externas "Inline"

¿Que son las tablas externas?

Las tablas externas existen en Oracle desde la versión 9i, y permiten acceder a información contenida en archivos de texto como si fueran tablas almacenadas dentro de la base de datos.

 

Las mismas fueron adquiriendo nuevas características con el paso del tiempo. Inicialmente, eran de solo lectura, pero desde Oracle 10g se puede realizar modificaciones a las mismas.

 

En Oracle 12.2 es posible “particionar” el contenido de las tablas externas, con lo cual podemos ver varios archivos como si fueran una única tabla, y también es posible modificar algunos parámetros (como ser el directorio por defecto o los nombres de archivo) directamente al momento de escribir una consulta, sin necesidad de modificar la definición de la tabla en forma permanente.

 

¿Qué es lo nuevo en Tablas Externas en Oracle 18c?

Oracle 18c introduce la opción de Tablas Externas "INLINE", lo que traducido a conceptos básicos significa que la definición de la tabla externa se puede hacer directamente en la sentencia que la va a utilizar, sin necesidad de que la misma exista previamente.

 

SELECT Pais, Provincia, Sucursal, MontoMensual 
FROM   EXTERNAL (
                    ( Pais    VARCHAR2(30),
                      Provincia VARCHAR2(30),
                      Sucursal  VARCHAR2(30),
                      MontoMensual NUMBER(18,4) )
                    TYPE oracle_loader
                    DEFAULT DIRECTORY datos_externos
                    ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE
                                        BADFILE datos_externos
                                        LOGFILE datos_externos:'inline_ext_tab_%a_%p.log'
                                        DISCARDFILE datos_externos
                                        FIELDS CSV WITH EMBEDDED TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
                                        MISSING FIELD VALUES ARE NULL ( Pais, Provincia, Sucursal, MontoMensual )
               ) LOCATION ('ventas_argentina.txt', 'ventas_chile.txt', 'ventas_uruguay.txt')
               REJECT LIMIT UNLIMITED ) inline_ext_tab
ORDER BY Pais, Provincia, Sucursal;

 

Si bien el código no queda muy elegante, permite acceder a datos externos (que sean accesibles para la base de datos) sin necesidad de crear un objeto de tipo tabla, lo cual puede ser muy útil en bases de datos o esquemas de solo lectura.

 

La sintraxis completa puede ser consultada aqui y aqui.