explique exatemente o q vc quer!
vc quer dado uma tabela obter seus campos e tipos?
----- Original Message -----
From: "Rildo Santos Santos" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, May 29, 2007 2:52 PM
Subject: [pgbr-geral] script de auditoria no banco de dados
Boa tarde a todos
Estou fazer um script de auditoria, mais o que acontece é que tenho tabela
com mais de 200 campos, então está ficando muito braçal, sem contar o
risco que estou correndo de deixar algum campo de fora da comparação, como
mostra o script abaixo.
Caso alguém tem uma idéia ou mesmo um script onde esta comparação e feita
dentro de um loop ou algo que não seja tanto braçal, e se o mesmo puder
min enviar um modelo ou mim da uma orientação como fazer isso, ficarei
muito agradecido....
Desde já obrigado!
Rildo..
-- deleta o trigger e as funções
DROP TRIGGER Tg_Mfi_InsUpd_Ant_Tbl_SysEstPr_Tabela_Estado on SysEstPr;
DROP TRIGGER Tg_Mfi_Delete_Dep_Tbl_SysEstPr_Tabela_Estado on SysEstPr;
DROP FUNCTION Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado();
-- cria a função ativada via a tabela de estado
Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado()
CREATE FUNCTION Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado() RETURNS
trigger AS $Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado$
DECLARE -- declaração das variaveis
------Tipo de operação-------
vlStrTpoOpr VARCHAR;
-----------Auditoria---------
vlIntRgsInc INTEGER;
vlIntRgsFnl INTEGER;
vlStrNmeTbl VARCHAR;
vlStrNmeCmp VARCHAR;
vlStrTpoCmp VARCHAR;
vlStrCntTxt TEXT;
BEGIN
IF tg_op <> 'DELETE' THEN
vlStrTpoOpr := 'I';
IF tg_op = 'UPDATE' THEN
vlStrTpoOpr := 'U';
END IF;
----------------Inicio da auditoria----------------------------------
vlStrNmeTbl := 'SysEstPr';
vlIntRgsInc := 1 ;
vlIntRgsFnl := (SELECT MAX(Ordinal_Position) FROM
information_schema.columns where table_name = vlStrNmeTbl);
IF vlIntRgsFnl IS NULL THEN
vlIntRgsFnl := 0;
END IF;
---WHILE vlIntRgsInc <= vlIntRgsFnl LOOP
--vlStrNmeCmp := (SELECT Column_name FROM
information_schema.columns where table_name = vlStrNmeTbl And
Ordinal_Position = vlIntRgsInc);
--vlStrTpoCmp := (SELECT data_type FROM
information_schema.columns where table_name = vlStrNmeTbl And
Ordinal_Position = vlIntRgsInc);
--vlStrCntCmp := 'SELECT ' || vlStrNmeCmp || ' FROM ' ||
vlStrNmeTbl || ' Where ' || vlStrCmpChv || ' = ' || vlStrEstChv ;
--IF vlStrCntTxt
--RAISE Notice ' (%), (%), (%), (%), (%), (%)', vlIntRgsInc,
vlIntRgsFnl, vlStrNmeTbl, vlStrNmeCmp, vlStrTpoCmp, vlStrCntCmp;
--vlIntRgsInc := vlIntRgsInc + 1;
--END LOOP;
vlStrCntTxt := '' ;
IF vlStrTpoOpr = 'U' THEN
IF New.NmeEst <> Old.NmeEst THEN
vlStrCntTxt := 'NmeEst ' || NmeEst.Old;
END IF;
IF New.RgoEst <> Old.RgoEst THEN
vlStrCntTxt := vlStrCntTxt || 'RgoEst ' ||
Old.RgoEst;
END IF;
IF New.FlgEst <> Old.FlgEst THEN
vlStrCntTxt := vlStrCntTxt || 'FlgEst ' ||
Old.FlgEst;
END IF;
IF New.ObsEst <> Old.ObsEst THEN
vlStrCntTxt := vlStrCntTxt || 'ObsEst ' ||
Old.ObsEst;
END IF;
END IF;
IF vlStrTpoOpr = 'I' THEN
INSERT INTO TblLogSs SELECT Current_DataBase(), Current_Schema(),
vlStrNmeTbl, Session_User, Inet_Client_Addr(), Session_User,
New.UsrUltAltEst, now(), New.DtahorUltAltEst, vlStrTpoOpr, '',
vlStrCntTxt;
ELSIF vlStrTpoOpr = 'U' THEN
INSERT INTO TblLogSs SELECT Current_DataBase(), Current_Schema(),
vlStrNmeTbl, Session_User, Inet_Client_Addr(), Session_User,
New.UsrUltAltEst, now(), New.DtahorUltAltEst, vlStrTpoOpr, '',
vlStrCntTxt;
END IF;
----------------Fimal da auditoria----------------------------------
RETURN NEW;
END IF;
IF tg_op = 'DELETE' THEN
IF (TG_OP = 'DELETE') THEN
RETURN OLD;
END IF;
RETURN OLD;
END IF;
END;
$Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado$ LANGUAGE plpgsql;
-- cria o gatilho Tg_Mfi_InsUpd_Ant_Tbl_SysEstPr_Tabela_Estado
CREATE TRIGGER Tg_Mfi_InsUpd_Ant_Tbl_SysEstPr_Tabela_Estado BEFORE INSERT
OR UPDATE ON SysEstPr
FOR EACH ROW EXECUTE PROCEDURE
Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado();
-- cria o gatilho Tg_Mfi_Delete_Dep_Tbl_SysEstPr_Tabela_Estado
CREATE TRIGGER Tg_Mfi_Delete_Dep_Tbl_SysEstPr_Tabela_Estado AFTER DELETE
ON SysEstPr
FOR EACH ROW EXECUTE PROCEDURE
Fc_Mfi_Atv_Via_Tbl_SysEstPr_Tabela_Estado();
_________________________________________________________________
MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral