Insertando datos en tablas externas

7 comentarios

En este artículo habíamos visto como insertar datos que se encuentran en un archivo externo dentro de una tabla de Firebird:

https://firebird21.wordpress.com/2013/03/03/insertando-una-gran-cantidad-de-filas/

Ahora veremos el proceso inverso: crear un archivo externo e insertarle filas.

En realidad es muy sencillo.

CREATE TABLE MITABLAEXTERNA EXTERNAL 'E:\DATABASES\EXTERNA.TXT' (
   EXT_IDENTI SMALLINT,
   EXT_NOMBRE VARCHAR(40));

Como ves, al comando CREATE TABLA solamente se le agrega la palabra clave EXTERNAL y el nombre que queremos darle al archivo externo, rodeado con apóstrofos.

Para insertarle datos, se hace exactamente igual que con una tabla normal:

INSERT INTO MITABLAEXTERNA (EXT_IDENTI, EXT_NOMBRE) VALUES (1, 'MARCELA')
INSERT INTO MITABLAEXTERNA (EXT_IDENTI, EXT_NOMBRE) VALUES (2, 'SILVIA')

EXTERNAL1

Captura 1. Si haces clic en la imagen la verás más grande

Pero a una tabla externa no se le pueden actualizar filas ni tampoco borrar filas. Solamente se le pueden insertar filas.

Si ahora abrimos el archivo ‘EXTERNA.TXT’ con el bloc de notas, esto es lo que veremos:

EXTERNAL2

Captura 2. Si haces clic en la imagen la verás más grande

Los nombres se ven bien, pero los números no. ¿Por qué? ¿qué pasó?

Es que los números se guardan con su representación binaria, no como su representación de texto. En otras palabras, todos los números serán ilegibles para la gran mayoría de los seres humanos. ¿Y cuál es la solución? Muy fácil, que todas las columnas sean de tipo CHAR, así siempre podremos visualizarlas correctamente:

CREATE TABLE MITABLAEXTERNA2 EXTERNAL 'E:\DATABASES\EXTERNA2.TXT' (
   EXT_IDENTI CHAR(5),
   EXT_NOMBRE CHAR(40));

Y como ahora todas las columnas son de tipo CHAR entonces podemos rodear a las constantes con apóstrofos si queremos (pero no es obligatorio con las constantes numéricas):

INSERT INTO MITABLAEXTERNA (EXT_IDENTI, EXT_NOMBRE) VALUES ('1', 'MARCELA')
INSERT INTO MITABLAEXTERNA (EXT_IDENTI, EXT_NOMBRE) VALUES ('2', 'SILVIA')

Y si ahora abrimos el archivo ‘EXTERNA2.TXT’ con el bloc de notas, esto es lo que veremos:

EXTERNAL3

Captura 3. Si haces clic en la imagen la verás más grande

¡¡¡PERFECTO!!! ya vemos los identificadores y los nombres de las personas. Que es exactamente lo que deseábamos.

Si los datos que queremos insertar se encuentran en alguna tabla de Firebird (que es el caso más común) entonces para insertarlos podemos utilizar una subconsulta:

INSERT INTO MITABLAEXTERNA2
   (EXT_IDENTI, EXT_NOMBRE)
SELECT
   CLI_IDENTI,
   CLI_NOMBRE
FROM
   CLIENTES

EXTERNAL4

Captura 4. Si haces clic en la imagen la verás más grande

A las dos filas que ya teníamos anteriormente en nuestra tabla externa ahora se le agregaron los datos de los clientes. Usar SELECT para insertar datos a las tablas es lo más rápido que existe.

IMPORTANTE:

Un archivo externo no puede tener Primary Key, ni Foreign Key, ni cualquier clase de índices. ¿Por qué no? porque no tiene sentido, ya que puede ser abierto por cualquier programa (como el Bloc de notas del Windows, por ejemplo) y por lo tanto está afuera del control del Firebird. Las restricciones y los índices solamente tienen sentido si están bajo el control del Firebird.

Tampoco se justifica especificar que una columna será NOT NULL porque en un archivo externo todas las columnas siempre son NOT NULL, así que declarar a una columna como NOT NULL es innecesario.

Conclusión:

Tener la posibilidad de exportar datos en archivos externos puede ser muy importante en algunas ocasiones, con Firebird es muy fácil hacerlo, solamente debemos recordar que a esos archivos solamente se le pueden insertar datos, no se puede modificar esos datos ni borrarlos. Y también hay que recordar que los archivos externos no pueden tener restricciones ni índices porque como son externos entonces pueden ser abiertos por otros programas y en ese caso se encontrarían afuera del control del Firebird.

Artículos relacionados:

Insertando una gran cantidad de filas

El índice del blog Firebird21

Anuncios

Usando ISQL.EXE para extraer los metadatos

1 comentario

Como seguramente sabes, en cada instalación de Firebird viene incluido un programa llamado ISQL.EXE (Interactive SQL) con el cual puedes realizar todas las operaciones posibles en una Base de Datos (crearla, conectarte a ella, agregarle dominios, tablas, índices triggers, stored procedures, insertar filas, modificar filas, borrar filas, etc., etc. etc.)

También podemos usar ese programa para extraer los metadatos y guardarlos en un archivo de texto plano ¿para qué necesitaríamos hacer algo así? por muchas razones, por ejemplo:

  • Verificar que todos los metadatos son los correctos
  • Verificar que no esté sobrando algún dominio
  • Cambiarle el nombre a una tabla

No es necesario usar ISQL.EXE para estas tareas, las mismas puedes también realizarlas con cualquier administrador gráfico como el EMS SQL Manager, el IBExpert, el Flame Robin, etc., pero la ventaja de hacerlas con ISQL.EXE es que este programa está siempre disponible, siempre lo tenemos a nuestra disposición, en cambio podría darse el caso que no contemos con los otros programas.

Enviar los metadatos a un archivo de texto plano tiene la gran ventaja de que muy rápidamente podemos encontrar la información que necesitamos, por ejemplo:

  • ¿Hay algún índice descendente?
  • ¿Hay alguna tabla sin Primary Key?
  • ¿Los nombres de todas las tablas son los correctos?
  • ¿Todas las tablas hijas tienen Foreign Keys a sus tablas padres?
  • ¿Hay algún dominio que no se esté usando?
  • ¿Todas las tablas que deberían tener columnas calculadas, tienen columnas calculadas?
  • Y un largo etcétera

¿Cómo enviamos los metadatos a un archivo de texto usando ISQL.EXE?

  1. Abriendo la ventanita “Símbolo del sistema” del Windows
  2. Ubicándonos en la carpeta donde se encuentra el programa ISQL.EXE
  3. Escribiendo: ISQL -extract MiBaseDatos > MiArchivoTexto

Donde “MiBaseDatos” puede ser la ruta y el nombre completos de la Base de Datos o simplemente un alias que hayamos especificado en el archivo ALIASES.CONF

ISQL1

Captura 1. Si haces clic en la imagen la verás más grande

En este ejemplo, el alias de la Base de Datos es ERP2000 (se lo definió en el archivo ALIASES.CONF) y el nombre del archivo de texto es ERP2000.SQL (el nombre y la extensión pueden ser cualesquiera, en el caso de la extensión la que más se usa es .SQL) y el símbolo “mayor que” es el utilizado por el DOS para redirigir la salida a un archivo.

Luego de unos segundos, cuando el programa ISQL.EXE finalice su tarea tendremos un archivo de texto llamado ERP2000.SQL conteniendo los metadatos de ERP2000.FDB

Podemos ver el contenido de ese archivo de texto con cualquier programa que permita leer archivos de texto, por ejemplo con el Bloc de Notas del Windows.

ISQL2

Captura 2. Si haces clic en la imagen la verás más grande

En la Captura 2 puedes ver los primeros metadatos.

Ahora, ya es muy fácil revisar el archivo de texto y encontrar cualquier inconsistencia que tenga la Base de Datos.

Artículo relacionado:

El índice del blog Firebird21