EXTERNAL TABLEs y ALTER TABLE … LOCATION

Los que hayan echado un vistazo -o trabajado- con tablas externas (EXTERNAL TABLEs) en Oracle quizá no hayan advertido una útil característica que nos proporciona el comando ALTER TABLE <nombre_tabla> LOCATION(<directorio>:'<nombre_fichero>’), el cual nos permite ‘montar’ en una tabla externa ficheros para su consulta de una forma sencilla:

Para verlo, vamos a crear los ficheros de texto external01 y external02 en un directorio del sistema de ficheros (mediante cualquier editor).

external01:

1,UNO
2,DOS
3,TRES
4,CUATRO
5,CINCO

external02

6,SEIS
7,SIETE
8,OCHO
9,NUEVE
10,DIEZ

Luego, creamos el objeto DIRECTORY que apunte al directorio donde están dichos ficheros:

carlos@TEST10G> CREATE DIRECTORY DIRECTORY01 AS '/blah/blah/blah/blah'
/

A continuación creamos la definición de la tabla externa (nótese que dejamos vacía la cláusula LOCATION):

carlos@TEST10G> CREATE TABLE EXT_TAB
2               ( ID_N  NUMBER(3),
3                 C_TXT VARCHAR2(10) )
4               ORGANIZATION EXTERNAL
5               (
6                  TYPE ORACLE_LOADER
7                  DEFAULT DIRECTORY DIRECTORY01
8                  ACCESS PARAMETERS
9                  ( RECORDS DELIMITED BY NEWLINE
10                    FIELDS TERMINATED BY ','
11                  )
12                  LOCATION ('')
13               )
14               REJECT LIMIT UNLIMITED;

Tabla creada.

Ahora viene lo bueno:

carlos@TEST10G> alter table ext_tab location('external01');

carlos@TEST10G> select * from ext_tab;

ID_N       C_TXT
---------- ----------
         1 UNO
         2 DOS
         3 TRES
         4 CUATRO
         5 CINCO

carlos@TEST10G> alter table ext_tab location('external02');

Tabla modificada.

carlos@TEST10G> select * from ext_tab;

ID_N       C_TXT
---------- ----------
         6 SEIS
         7 SIETE
         8 OCHO
         9 NUEVE
        10 DIEZ

carlos@TEST10G> alter table ext_tab location('external01','external02');

Tabla modificada.

carlos@TEST10G> select * from ext_tab;

ID_N       C_TXT
---------- ----------
         1 UNO
         2 DOS
         3 TRES
         4 CUATRO
         5 CINCO
         6 SEIS
         7 SIETE
         8 OCHO
         9 NUEVE
        10 DIEZ

10 filas seleccionadas.

carlos@TEST10G>

Así vemos que de una manera sencilla podemos consultar el contenido de los ficheros y utilizarlos como una tabla más en cualquier operación que queramos efectuar con otras tablas.

Una cosa más. Si se ha instalado la versión 10gR2 en un lenguaje no-inglés se topará con el BUG 5172459:

carlos@TEST10G> ALTER TABLE EXT_TAB LOCATION ('external01')
2  /

Tabla modificada.

carlos@TEST10G> select * from EXT_TAB;
select * from EXT_TAB

ERROR en línea 1:
ORA-29913: error al ejecutar la llamada de ODCIEXTTABLEOPEN
ORA-29400: error de cartucho de datos
KUP-00552: internal XAD package failed to load
ORA-06512: en "SYS.ORACLE_LOADER", línea 19

Errors selecting from an external table.

El problema está en los ficheros de mensajes para tablas externas. Se soluciona sustituyendo el fichero en cuestión por el de la versión en inglés:

1. cd $ORACLE_HOME/rdbms/mesg

2. cp KUP<lang>.msb KUP<lang>.msb.BAK

3. cp kupus.msb KUP<lang>.msb

Saludos.

Carlos.

2 respuestas a EXTERNAL TABLEs y ALTER TABLE … LOCATION

  1. Aitor dice:

    mmm.. buena aportación! no tenía ni idea del alter que comentas.

    Acabo de encontrar tu blog, y ya me lo he apuntado en los Marcadores., hay cosas interesantes que tendré que repasar!

    Un saludo y muchas gracias!

  2. […] es muy bonito en la teoría, pero tras descargar el fichero e incorporarlo como tabla externa a una Base de Datos Oracle (p.ej.) tenemos […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: