[firebase-br] Junção 2 bancos Dados

Diego TI - Trinys diego em trinys.com.br
Sex Jan 20 12:13:47 -03 2017


 

Bom dia! 

 Tenho a seguinte situação:
 2 Bancos rodando Firebird
2.5
  BANCO A(PRINCIPAL) - BANCO B(SECUNDARIO).
 Tenho nos dois bancos
as tabelas de Nota e Nota_Itens. 

Preciso efetuar consultas unificando
as tabelas dos BANCOS A E B e tenho a necessidade de utilizar a

clausula left/righ outer join, sum, etc... Para a busca de dados
unificados dos 2 bancos. 

Abaixo uma de minhas consultas que nao
obtenho exito, para o melhor entendimento: 

SELECT SUM(L.QTDE) QTDE,
N.CODCLI FROM PRO_JUNCAONOTA_ITENS L'+ 
 RIGHT OUTER
JOIN PRO_JUNCAONOTA N ON (N.TIPO = L.TIPO) AND (N.DOC = L.DOC)'+
 LEFT
OUTER JOIN REFERENCIA R ON (R.CODIGO = L.CODREF)'+
 WHERE (N.EMISSAO
BETWEEN 'DATA1' AND 'DATA2'
 GROUP BY N.CODCLI 

No caso esta consulta
eu farei ja com dados unificados. 

Ja tentei criando as procedures no
BANCO A que traga os dados do BANCO B para cada
tabela(Nota,Itens_Nota),
mas nao obtive exito no momento que vou
executar a consulta acima, pois fica carregando a consulta eternamente.
Abaixo Procedures: 

****PROCEDURE QUE UNIFICA TABELAS NOTA****
CREATE
OR ALTER PROCEDURE "PRO_JUNCAONOTA" 

RETURNS
(
"PTIPO" CHAR(5),
"PDOC"
INTEGER,
"PEMISSAO" DATE,
"PCODTRA" SMALLINT,
"PCODCLI"
INTEGER,
"PCODREP" VARCHAR(5),
"PCOMISSAO" NUMERIC(8, 3),
"PCODCON"
VARCHAR(5),
"POBS1" VARCHAR(30),
"POBS2" VARCHAR(30),
"POBS3"
VARCHAR(30),
"POBS4" VARCHAR(30),
"POBS5" VARCHAR(30),
"POBS6"
VARCHAR(30),
"POBS7" VARCHAR(30),
"POBS8" VARCHAR(30),
"PTOTALPRODUTO"
NUMERIC(18, 2),
"PFRETE" NUMERIC(18, 2),
"POUTRAS" NUMERIC(18,
2),
"PVALORTOTAL" NUMERIC(18, 2),
"PDESCONTO1" NUMERIC(7,
3),
"PDESCONTO2" NUMERIC(7, 3),
"PDESCONTO3" NUMERIC(7, 3),
"PDESCONTO4"
NUMERIC(7, 3),
"PDESCONTO5" NUMERIC(7, 3),
"PCOMPLEMENTO"
BLOB,
"PUSUARIO" VARCHAR(35),
"PACE" CHAR(1),
"PTOTALDESCONTOS"
NUMERIC(13, 2),
"PBRUTO" NUMERIC(18, 3),
"PLIQUIDO" NUMERIC(18,
3)
)
AS
declare variable LCCOMANDO varchar(5000);
BEGIN
/* Buscar Tab
Nota BD 1*/
lcComando = 'select
Tipo,Doc,Emissao,CODTRA,CODCLI,CODREP,COMISSAO,CODCON,OBS1,OBS2,OBS3,OBS4,'
||
'OBS5,OBS6,OBS7,OBS8,TOTALPRODUTO,OUTRAS,VALORTOTAL,DESCONTO1,DESCONTO2,DESCONTO3,'
||
'DESCONTO4,DESCONTO5,COMPLEMENTO,USUARIO,ACE,Frete,bruto,liquido,TOTALDESCONTO
' ||
'from NOTA' ;
FOR EXECUTE STATEMENT
lcComando
INTO
:pTipo,:pDoc,:pEmissao,:pCODTRA,:pCODCLI,:pCODREP,:pCOMISSAO,:pCODCON,:pOBS1,:pOBS2,:pOBS3,:pOBS4,:pOBS5,:pOBS6,:pOBS7,:pOBS8,:pTOTALPRODUTO,
:pOUTRAS,:pVALORTOTAL,:pDESCONTO1,:pDESCONTO2,:pDESCONTO3,:pDESCONTO4,:pDESCONTO5,:pCOMPLEMENTO,:pUSUARIO,:pACE,:pFrete,:pbruto,:pliquido,:pTOTALDESCONTOS
DO
BEGIN
SUSPEND;
END
/* Buscar Tab NOTA BD 2 */
lcComando = 'SELECT *
FROM NOTA' ;
FOR EXECUTE STATEMENT lcComando
ON EXTERNAL
'caminho_Banco_Externo'
AS USER 'user'
PASSWORD
'pass'
INTO
:pTipo,:pDoc,:pEmissao,:pCODTRA,:pCODCLI,:pCODREP,:pCOMISSAO,:pCODCON,:pOBS1,:pOBS2,:pOBS3,:pOBS4,:pOBS5,:pOBS6,:pOBS7,:pOBS8,:pTOTALPRODUTO,
:pOUTRAS,:pVALORTOTAL,:pDESCONTO1,:pDESCONTO2,:pDESCONTO3,:pDESCONTO4,:pDESCONTO5,:pCOMPLEMENTO,:pUSUARIO,:pACE,:pFrete,:pbruto,:pliquido,:pTOTALDESCONTOS
DO
BEGIN
SUSPEND;
END
END
^ 

****PROCEDURE QUE UNIFICA TABELAS
NOTA_ITENS****
CREATE OR ALTER PROCEDURE "PRO_JUNCAONOTA_ITENS"


RETURNS
(
"PTIPO" CHAR(5),
"PDOC" INTEGER,
"PORDEM"
SMALLINT,
"PCODREF" VARCHAR(10),
"PDESCRI" VARCHAR(40),
"PQTDE"
NUMERIC(18, 3),
"PUNIDADE" VARCHAR(3),
"PSOMAR" CHAR(1),
"PCOMISSAO"
NUMERIC(8, 3),
"PDESCONTO" NUMERIC(9, 5),
"PCODPRO" INTEGER,
"PUNITARIO"
NUMERIC(18, 4),
"PVALPRODUTOS" NUMERIC(18, 2),
"PDESCONTOREAIS"
NUMERIC(18, 2),
"PTOTALCOMISSAO" NUMERIC(18, 2)
)
AS
declare variable
LCCOMANDO varchar(5000);
BEGIN
/* Buscar Tab Notalan BD 1*/
lcComando =
'select Tipo,Doc,ORDEM,CODREF,DESCRI,QTDE,'
||
'UNIDADE,SOMAR,COMISSAO,DESCONTO,CODPRO,'
||
'UNITARIO,total,DESCONTOREAIS,TOTALCOMISSAO from NOTA_ITENS' ;
FOR
EXECUTE STATEMENT
lcComando
INTO
:pTipo,:pDoc,:PORDEM,:pCODREF,:pDESCRI,:pQTDE,
:pUNIDADE,:pSOMAR,:pCOMISSAO,:pDESCONTO,:pCODPRO,
:pUNITARIO,:pVALPRODUTOS,:pDESCONTOREAIS,:pTOTALCOMISSAO
DO
BEGIN
SUSPEND;
END
/* Buscar Tab Nota_Itens BD 2 */
lcComando = 'SELECT
* FROM NOTA_ITENS';
FOR EXECUTE STATEMENT lcComando
ON EXTERNAL
'caminho'
AS USER 'user'
PASSWORD
'pass'
INTO
:pTipo,:pDoc,PORDEM,:pCODREF,:pDESCRI,:pQTDE,
:pUNIDADE,:pSOMAR,:pCOMISSAO,:pDESCONTO,:pCODPRO,
:pUNITARIO,:pVALPRODUTOS,:pDESCONTOREAIS,:pTOTALCOMISSAO
DO
BEGIN
SUSPEND;
END
END
^ 

  

Agradeco desde ja e peço desculpas se
nao soube explicar o problema que estou passando. 

Abs 

-- 

Diego F
Souza

Em 17/01/2017 17:40, Gladiston Santana escreveu: 

> Se voce
criar loops encadeados, isto é, loops dentro de loops no estilo
>
master/detail poderá criar um resultado similar ao que seria exibido por
um
> join.
> inclusive isso seria ótimo para consolidar um relatório de
diferentes base
> de dados.
>
______________________________________________
> FireBase-BR
(www.firebase.com.br [1]) - Hospedado em www.locador.com.br [2]
> Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107 [3]
> Para consultar
mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html [4]




Links:
------
[1] http://www.firebase.com.br
[2]
http://www.locador.com.br
[3]
http://www.firebase.com.br/fb/artigo.php?id=1107
[4]
http://www.firebase.com.br/pesquisa_lista.html



Mais detalhes sobre a lista de discussão lista