[firebase-br] GPRE

euler sig euler em siginformatica.com.br
Seg Maio 16 09:02:16 -03 2005


Olá a todos.
Estou desenvolvendo um programa que utiliza acesso direto às API´s 
IB/Firebird. Inicialmente tenho efetuado testes utilizando um pequeno 
programa em C, que posteriormente é processado pelo GPRE (utilitário que 
acompanha o IB/Firebird) - A listagem está abaixo.
O problema é o seguinte: tenho dois bancos com a mesma estrutura e 
tabelas. Um contém tabelas "populadas" e o outro totalmente vazio. 
Preciso incluir as linhas das tabelas de um para o outro, mas não quero 
utilizar FETCH porque é muito lento.
Utilizando INSERT INTO... SELECT é muito + rápido. Este exemplo pode ser 
executado em Win ou Linux. A linha de comando é a seguinte:
 
gpre test.e -c -manual -no_lines -either_case -user sysdba -password 
masterkey
 
Obtenho o seguinte erro:
Inconsistent database specifier
 
Se eu utilizar FETCH, incluindo linha a linha funciona. Mas o desempenho 
é muito baixo.
 
Abaixo o cod. fonte (TEST.E) que é processado pelo GPRE, devendo gerar o 
arquivo TEST.C:
 
#include <ibase.h>
#include <stdio.h>
#include <stdlib.h>
 
int main( int argc, char *argv[] ) {
 
    EXEC SQL SET DATABASE db1 = "test.fdb";
    EXEC SQL SET DATABASE db2 = "test2.fdb";
 
    EXEC SQL CONNECT ALL USER 'SYSDBA' PASSWORD 'masterkey';
 
    EXEC SQL SET TRANSACTION;
 
    /* aqui ocorre o problema */
    EXEC SQL INSERT INTO db2.TEST SELECT * FROM db1.TEST;
 
    EXEC SQL COMMIT;
  
    EXEC SQL DISCONNECT ALL;
 
    return( 0 );
}


Se alguém tiver alguma dica !
Euler Jr.



Mais detalhes sobre a lista de discussão lista