A veces tenemos una Base de Datos de Firebird que tiene datos que nos interesaría copiarlos en otra Base de Datos de Firebird.
Por ejemplo, los clientes que están en DB1 quisiéramos copiarlos en DB2.
Podemos conseguir eso con un stored procedure como el siguiente:
CREATE PROCEDURE IMPORTAR_CLIENTES RETURNS( ftnCodSuc SMALLINT; -- Código de la Sucursal ftnIdenti BIGINT; -- Identificador del Cliente ftcNombre VARCHAR(60); -- Nombre del Cliente AS DECLARE VARIABLE lcComando VARCHAR(128); BEGIN lcComando = 'SELECT CLI_CODSUC, CLI_IDENTI, CLI_NOMBRE FROM CLIENTES'; FOR EXECUTE STATEMENT lcComando ON EXTERNAL DATA SOURCE 'E:\MISDATOS\DATABASES\DB1.FDB' AS USER 'SYSDBA' PASSWORD 'masterkey' INTO :ftnCodSuc, :ftnIdenti, :ftcNombre DO BEGIN INSERT INTO CLIENTES (CLI_CODSUC, CLI_IDENTI, CLI_NOMBRE) VALUES(:ftnCodSuc , :ftnIdenti , :ftcNombre ); SUSPEND; END END
Los pasos son los siguientes:
- En la variable lcComando escribimos el SELECT que queremos obtener de la Base de Datos externa.
- Mediante un ciclo FOR EXECUTE STATEMENT obtenemos cada una de las filas. El contenido de las columnas CLI_CODSUC, CLI_IDENTI y CLI_NOMBRE lo copiamos en las variables ftnCodSuc, ftnIdenti y ftcNombre (eso es lo que hace la cláusula INTO)
- Realizamos el INSERT en la tabla CLIENTES de la Base de Datos interna, la normal
- El SUSPEND es opcional, se lo utiliza si queremos que a medida que se vayan insertando filas éstas sean mostradas al usuario. De esta manera para el usuario es más visual porque está viendo como se van insertando los clientes.
- Si usas el SUSPEND entonces este será un stored procedure seleccionable y para ejecutarlo deberás escribir: SELECT * FROM IMPORTAR_CLIENTES
Observaciones:
- Si no quieres insertar clientes sino solamente mostrarlos, eliminas la línea del INSERT … VALUES y ya está.
- En este ejemplo se asumió que la tabla se llama CLIENTES en ambas bases de datos y que las tres columnas tienen la misma definición en ambas bases de datos, si este no es el caso deberás adecuar las columnas para que puedan contener los datos insertados.
Artículos relacionados:
Entendiendo a los stored procedures
Comentarios recientes