[firebase-br] LOGs de Auditoria em Banco Externo

José Mauricio Barbisan Zottis bzottis em ig.com.br
Seg Nov 4 10:21:21 -03 2013


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
>



Mais detalhes sobre a lista de discussão lista