[firebase-br] Copia de tabela de um banco Firebird para outro banco
Gladiston Santana
gladiston em vidy.com.br
Ter Ago 13 13:46:00 -03 2019
Exemplo de uma procedure que faz uso de external, ela retorna uma lista de
endereços baseado nas iniciais do cep informado como parâmetro.
Note que para facilitar o debug cada parâmetro do external está numa
variável local diferente.
O uso do external torna difícil o debug, então separar os parametros em
variaveis ajuda na manutenção do código.
No seu caso, o problema é a inexistência do "campo" na "tabelaA".
Como sugestão, quando usar 'external data' use o primeiro select como sendo
select 1 as resultado from rdb$database
pois o select acima é certeza que não tem erro, daí você apenas se
concentra se os parametros do 'external data' estão corretos, se funcionar
daí então troca a query sabendo que a conexão tá beleza.
Use o exemplo, adapte segundo suas necessidades:
create or alter procedure GET_CEP (
P_CEP varchar(8) = '')
returns (
CEP char(8),
LOGRADOURO varchar(125),
BAIRRO varchar(70),
CIDADE varchar(70),
UF char(2),
LAST_UPDATE timestamp)
as
declare variable L_CONN_STRING varchar(255) =
'server:\caminho\para\ceps.fdb';
declare variable L_CONN_USER varchar(30) = 'SYSDBA';
declare variable L_CONN_PASSWORD varchar(30) = 'masterkey';
declare variable L_CONN_ROLE varchar(30) = 'rdb$admin';
declare variable L_SQL varchar(1024) = '';
begin
cep='';
logradouro='';
bairro='';
cidade='';
uf='';
last_update='01.01.1970';
l_sql='select cep, logradouro, bairro, cidade, uf, last_update from ceps
';
if (:p_cep<>'') then
begin
if ((char_length(:p_cep)<8) and (position ('%' in :p_cep)=0)) then
p_cep=:p_cep||'%';
if (position ('%' in :p_cep)=0)
then l_sql=:l_sql||'where cep like '''||:p_cep||'''';
else l_sql=:l_sql||'where cep='''||:p_cep||'''';
end
for execute statement :l_sql
on external :l_conn_string
as user :l_conn_user
password :l_conn_password
role :l_conn_role
into :cep, :logradouro, :bairro, :cidade, :uf, :last_update do
begin
suspend;
end
end
Em ter, 13 de ago de 2019 às 12:07, UPSAI | Informatica <
informatica em upsai.com.br> escreveu:
> Prezados
>
> Na semana passada solicitei ajuda do grupo para a execução da função de
> copiar uma tabela de um banco Firebird para outro.
>
> Na oportunidade, me foi sugerido que procurasse informações sobre o comando
> "execute statement on external".
>
> Nesta pesquisa cheguei ao código abaixo, porem ao tentar executa-lo estou
> recebendo mensagem de erro (Column does not belong to referenced table.
> Dynamic SQL Error. SQL error code = -206.Column unknown. CAMPO. At line 8,
> column 29.)
>
>
> EXECUTE block AS
> DECLARE variable campoTemp VARCHAR(500);
> BEGIN
> FOR EXECUTE STATEMENT 'select campo from tabelaA'
> ON EXTERNAL DATA SOURCE '192.168.0.250:C:\database\BancoA.FDB' AS USER
> 'sysdba' PASSWORD 'masterkey'
> INTO :campoTemp
> DO BEGIN
> INSERT INTO TabelaB (campo) VALUES (:campoTemp);
> END
> END;
>
>
> Alguém tem alguma informação para eu corrigir este procedimento?
>
>
>
> Saudações
>
> Wagner Aranha
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>
--
A Vidy possui um Sistema de Gestão da Qualidade estruturado e com
Certificação ISO 9001 há mais de 10 anos, mantendo seu foco na Qualidade e
na Melhoria Continua.
Em março de2018 migramos com sucesso para a nova versão da ISO 9001.
Somos a única Empresa Brasileira de Engenharia de Laboratórios com
certificação com o Escopo Completo; desde Projetos, Engenharia, Construção,
Fabricação e Instalação de Laboratórios.
Mais detalhes sobre a lista de discussão lista