CLUSTERBIT escribió:
hola a todos espero me ayuden
nesecito hacer una bitacora de una base de datos que en cada dato que se ingrese en las tablas de la base de datos
se cree un registro en la tabla maestra ts_auditoria
y los campos de esta tabla son:
AUDI_ID
AUDI_IP
AUDI_FECHA
AUDI_TABLA
AUDI_CAMPO
AUDI_VALOR_ANTERIOR
AUDI_VALOR_ACTUAL
ahora nose como empezar tengo nocion de que es con un trigger
por eso les consulto para que me den una manita de como empezar
saludos
-- EJEMPLO EN POSTGRESQL
-- ESPERO TE SIRVA
-- Table: tbl_audit
-- DROP TABLE tbl_audit;
CREATE TABLE tbl_audit
(
pk_audit serial NOT NULL,
"TableName" character(45) NOT NULL,
"Operation" character(1) NOT NULL,
"OldValue" text,
"NewValue" text,
"UpdateDate" timestamp without time zone NOT NULL,
"UserName" character(45) NOT NULL,
"IP" inet,
CONSTRAINT pk_audit PRIMARY KEY (pk_audit)
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_audit OWNER TO sisap;
-- Function: fn_log_audit()
-- DROP FUNCTION fn_log_audit();
CREATE OR REPLACE FUNCTION fn_log_audit()
RETURNS trigger AS
$BODY$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "UpdateDate", "UserName","IP")
VALUES (TG_TABLE_NAME, 'D', OLD, NULL, now(), USER,inet_client_addr());
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "UpdateDate", "UserName","IP")
VALUES (TG_TABLE_NAME, 'U', OLD, NEW, now(), USER,inet_client_addr());
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "UpdateDate", "UserName","IP")
VALUES (TG_TABLE_NAME, 'I', NULL, NEW, now(), USER,inet_client_addr());
RETURN NEW;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION fn_log_audit() OWNER TO sisap;
CREATE TRIGGER tbl_atributos_tg_audit
AFTER INSERT OR UPDATE OR DELETE
ON cesta_ubicaciones
FOR EACH ROW
EXECUTE PROCEDURE fn_log_audit();