[firebase-br] LOGs de Auditoria em Banco Externo

Rodrigo Gomes da Silva rodrgomes em gmail.com
Seg Nov 4 10:48:45 -03 2013


É sempre bom usar parametro para valor de campo string ou de blob com
execute statement. Do jeito que vc montou qualquer aspas no texto do blob
vai dar erro.
No seu caso o problema nem é este mas resolveria do mesmo jeito. Como a
variavel SQL esta declarada como "VARCHAR(1000)" se o insert somando o
tamanho do conteudo do blob der mais que isto ele vai dar string
truncation.


Em 4 de novembro de 2013 10:21, José Mauricio Barbisan Zottis <
bzottis em ig.com.br> escreveu:

> obrigado Gladison, mas aí que estou penando.
> a estrutura é a mesma,
> o campo da tabela no banco local é BLOB TEXT Charset win1252
> na base externaé exatamente a mesma, e o parâmetro na procedure que faz a
> inserção é a mesma.
> Estrutura da Base Local
>
> CREATE TABLE EVENTOS_CLIENTE (
>     COD_EVENTO_CLI  PK NOT NULL /* PK = INTEGER NOT NULL */,
>     DATA_CAD        DATAS /* DATAS = DATE */,
>     HORA_CAD        TEMPO /* TEMPO = TIME */,
>     COD_USUARIO     PK /* PK = INTEGER NOT NULL */,
>     COD_EVENTO      PK /* PK = INTEGER NOT NULL */,
>     OBS             MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 240 */,
>     COD_CLIENTE     PK /* PK = INTEGER NOT NULL */
> );
>
> A estrutura da Tabela de Logs:
> CREATE TABLE AUDITORIA_DETALHES (
>     CODIGO          PK /* PK = INTEGER NOT NULL */,
>     COD_AUDITORIA   PK /* PK = INTEGER NOT NULL */,
>     COLUNA          VARCHAR_35 /* VARCHAR_35 = VARCHAR(35) */,
>     VLR_ANTIGO      VARCHAR(255),
>     VLR_NOVO        VARCHAR(255),
>     VLR_NOVO_OBS    MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 240 */,
>     VLR_ANTIGO_OBS  MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 240 */
> );
>
> A Procedure de inserção:
> CREATE OR ALTER PROCEDURE SP_AUDITORIA_DETALHES (
>     VAR_CODIGO_AUD INTEGER,
>     COLUNA VARCHAR(45),
>     VLR_ANTIGO VARCHAR(255),
>     VLR_NOVO VARCHAR(255),
>     VLR_OBS_ANTIGO BLOB SUB_TYPE 1 SEGMENT SIZE 240,
>     VLR_OBS_NOVO BLOB SUB_TYPE 1 SEGMENT SIZE 240)
> AS
> DECLARE VARIABLE BANCO VARCHAR(150);
> DECLARE VARIABLE USUARIO_BD VARCHAR(50);
> DECLARE VARIABLE SENHA_BD VARCHAR(50);
> DECLARE VARIABLE SQL VARCHAR(1000);
> begin
>   BANCO      = 'externo';/*'192.168.1.10:D:\BD\EXTERNO.FDB';*/
>   USUARIO_BD = 'SYSDBA';
>   SENHA_BD   = 'masterkey';
>
> if (:VLR_ANTIGO is null )     then VLR_ANTIGO     = '';
> if (:VLR_NOVO is null )       then VLR_NOVO       = '';
> if (:VLR_OBS_ANTIGO is null ) then VLR_OBS_ANTIGO = '';
> if (:VLR_OBS_NOVO is null )   then VLR_OBS_NOVO   = '';
>
>   SQL =  'INSERT INTO auditoria_detalhes(COD_AUDITORIA, COLUNA, VLR_ANTIGO,
> VLR_NOVO, VLR_NOVO_OBS, VLR_ANTIGO_OBS) VALUES ('
>                                          ||:VAR_CODIGO_AUD ||','''||
> :COLUNA ||''','''|| :VLR_ANTIGO ||''','''|| :VLR_NOVO ||''','''||
> :VLR_OBS_NOVO||''','''|| :VLR_OBS_ANTIGO ||''');';
>
>
>   EXECUTE STATEMENT (:SQL)
>          ON EXTERNAL :BANCO
>          AS USER :USUARIO_BD PASSWORD :SENHA_BD
>    WITH COMMON TRANSACTION;
> end^
>
>
>
>
> Em 4 de novembro de 2013 10:12, Gladiston Santana
> <gladiston em vidy.com.br>escreveu:
>
> > Se vc esta tentando levar um blob para outra tabela que tambem seja blob,
> > beleza, mas se for um varchar, voce tem que tratar a informação antes de
> > depositar a informação lá na tabela de destino, como por exemplo,
> conferir
> > se o tamanho é adequado. Não é apenas a contagem de caracteres, mas
> > observar se o collate e o charset são os mesmos dos dois lados. Também
> > tomar cuidado com certos caracteres como \ (escape) e ' ",  as variaveis
> > sempre devem estar sanitizadas para evitar erros de interpretação do
> > compilador.
> >
> >
> > Em 4 de novembro de 2013 09:53, José Mauricio Barbisan Zottis <
> > bzottis em ig.com.br> escreveu:
> >
> > > Pessoal, estou tentando fazer os logs de alterações(Auditoria) em uma
> > base
> > > externa.
> > >
> > > consegui fazer com todos os tipos de campo sem problemas, mas os campos
> > > Blob Memo ta me tirando os poucos cabelos que me restam.
> > >
> > > se o memo tem poucas linhas ele faz normalmente, se for um pouco maior
> da
> > > erro de Truncation.
> > >
> > > a estrutura das tabelas são iguais, a SP que faz a inserção no outro
> > banco
> > > recebe os parâmetros também com a mesma estrutura.
> > >
> > > não sei mais o que fazer.
> > > ______________________________________________
> > > 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://firebase.com.br/pesquisa
> > >
> > ______________________________________________
> > 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://firebase.com.br/pesquisa
> >
> ______________________________________________
> 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://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista