A veces en nuestra Base de Datos actual no están todos los datos que necesitamos pues algunos se encuentran en otras bases de datos. ¿Podemos consultar esas otras bases de datos?

La respuesta es sí y la forma de hacerlo es mediante el comando EXECUTE STATEMENT. Sin embargo hay dos puntos importantes que debes recordar:

  1. El Firebird no valida que el EXECUTE STATEMENT sea correcto antes de ejecutarlo, por lo tanto eres tú quien debe asegurarse de ello
  2. El EXECUTE STATEMENT es lento (a veces puede ser demasiado lento)

Los dos puntos anteriores implican que debes sopesar bien si vale la pena usar el EXECUTE STATEMENT o si mejor sería pensar en otra alternativa.

Ejemplo:

En una Base de Datos llamada ERP2000.FDB tenemos una tabla llamada CARGOS que tiene estas filas:

EXTERNAS1

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

La columna CAR_IDENTI es el identificador del cargo, se usa internamente para referenciar a otras tablas con esta tabla. La columna CAR_CODIGO es la que se le muestra a los usuarios, ellos nunca ven la columna CAR_IDENTI ¿por qué? porque no necesitan verla, es para uso interno.

En otra Base de Datos, llamada BLOG_DB.FDB queremos ver las filas de la tabla CARGOS de ERP2000.FDB, para eso en BLOG_DB.FDB escribimos el siguiente stored procedure seleccionable:

SET TERM ^ ;

CREATE PROCEDURE OBTENER_CARGOS
RETURNS(
   ftnCodSuc SMALLINT,
   ftnIdenti INTEGER,
   ftcCodigo CHAR(4),
   ftcNombre VARCHAR(25))
AS
   DECLARE VARIABLE lcComando VARCHAR(256);
BEGIN

   lcComando = 'SELECT CAR_CODSUC, CAR_IDENTI, CAR_CODIGO, CAR_NOMBRE FROM CARGOS' ;

   FOR EXECUTE STATEMENT
      lcComando
   ON EXTERNAL
      'E:\SQL\SQL_CONTA\DATABASES\ERP2000.FDB'
   AS
      USER     'SYSDBA'
      PASSWORD 'masterkey'
   INTO
      :ftnCodSuc,
      :ftnIdenti,
      :ftcCodigo,
      :ftcNombre
   DO BEGIN
      SUSPEND;
   END

END^

SET TERM ; ^

Y después de escribir este comando:

SELECT * FROM OBTENER_CARGOS

este será el resultado que obtendremos:

EXTERNAS2

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

donde, como puedes ver, están todas las filas de la tabla CARGOS aunque los nombres de las columnas difieren porque los nombres de ellas son los que elegimos como parámetros de salida en nuestro stored procedure.

Conclusión:

Es perfectamente posible consultar bases de datos externas con Firebird pero como esa consulta se realiza con el comando EXECUTE STATEMENT a veces obtener los resultados puede demorar mucho tiempo por lo tanto debes verificar que la velocidad de respuesta esté dentro de los límites aceptables. En general si la tabla externa no tiene demasiadas filas no habría problemas. «Demasiadas filas» depende de tu hardware y de tu software, así que debes verificar.

Artículos relacionados:

Insertar, modificar o borrar filas en una Base de Datos externa

Importar datos desde otra Base de Datos

El índice del blog Firebird21