com o firebird 2.5 de uma procedure ou execute block voce pode de uma conexao com um banco (no caso o bd geral) se conectar a outros bancos, rodar SQL em um outro banco, talvez isso resolva a questao da memoria.
essa é uma nova extenção implementada no 2.5, na funcionalidade
EXECUTE STATEMENT
a sintaxe geral:
[FOR] EXECUTE STATEMENT <query_text> [(<input_parameters>)]
[ON EXTERNAL [DATA SOURCE] <connection_string>]
[WITH {AUTONOMOUS | COMMON} TRANSACTION]
[AS USER <user_name>]
[PASSWORD <password>]
[ROLE <role_name>]
[WITH CALLER PRIVILEGES]
[INTO <variables>]
observe a novidade na 2º linha
[ON EXTERNAL [DATA SOURCE] <connection_string>]
a sintaxe geral da <connection_string> é:
[<host_name><protocol_delimiter>]database_path
ou seja, voce pode ate criar uma tabela, onde voce cadastra um id, nome, descricao ou de qual cliente é o banco, e a string de conexao...
ex:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE TESTE
returns (
id integer,
nome varchar(100) collate win_ptbr)
as
declare variable caminho_bd varchar(200) collate win_ptbr;
declare variable select_sql varchar(255) collate win_ptbr;
begin
CAMINHO_BD = 'D:\CEP.FDB';
SELECT_SQL = 'SELECT BAIRRO_CODIGO, BAIRRO_DESCRICAO FROM BAIRRO';
FOR EXECUTE STATEMENT SELECT_SQL
ON EXTERNAL '
127.0.0.1:' || CAMINHO_BD
AS USER 'SYSDBA'
PASSWORD 'masterkey'
INTO :ID, :NOME
DO
BEGIN
/* aqui voce poderia chamar outras procedures
altera o valor dos parametros de saida
e realizar a maioria dos processos e
requisições ao banco de dados tudo de uma só vez */
SUSPEND;
END
/* Nos meus testes retornou 28871 registros
de um outro banco em um piscar de olhos */
END^
SET TERM ; ^
GRANT EXECUTE ON PROCEDURE TESTE TO SYSDBA;
qualquer duvida posta ai!
Boa Sorte!!!
--
--
Jeudí Prando
Mais vale o pouco do justo, que a abundância dos ímpios.
Salmo 36,16