Re: Ejemplo

From: Cesar Erices <caerices(at)gmail(dot)com>
To: kervin licett <kerljose(at)gmail(dot)com>
Cc: Lista - PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ejemplo
Date: 2009-06-06 14:05:36
Message-ID: 1cb5d9840906060705g64d76e66y507f1ddc15b09977@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 6 de junio de 2009 9:46, kervin licett <kerljose(at)gmail(dot)com> escribió:

Necesito crear un disparador para enviar los datos que modifique,inserte o
> actualize se almacenado en otra tabla, ademas q guarde el usuario que lo
> realizo dentro del sistema de informacion que esta programado en PHP
>
> --
> Br.Kervin J,Licett Santana
> Tlf: 0412-178-72-02
> 0243-551-67-79
>

===============================================================================
Esta es la funcion del disparador, la cual debes crear como disparador
===============================================================================

CREATE OR REPLACE FUNCTION audita_pacientes_trg()
RETURNS trigger AS
$BODY$
DECLARE
fecha timestamp;
equipo varchar;
BEGIN
select into fecha current_timestamp(0);
-- INSERTA LA IP DEL EQUIPO DEL USUARIO
select into equipo inet_client_addr();
--select into usuario user;
IF TG_OP='INSERT' THEN
INSERT INTO pacientes_auditados (pc_cod, pc_nombre, pc_apellidos,
pc_accion, pc_fecha, pc_equipo) VALUES (NEW.pc_cod,
NEW.pc_nombre,NEW.pc_apellido,0, fecha, equipo, *usuario_modifica*);
END IF;
IF TG_OP='UPDATE' THEN
INSERT INTO pacientes_auditados (pc_cod, pc_nombre, pc_apellidos,
pc_accion, pc_fecha, pc_equipo) VALUES (NEW.pc_cod,
NEW.pc_nombre,NEW.pc_apellido,1, fecha, equipo, NEW.*usuario_modifica*);
ED IF;

===============================================================================
EL ELIMINAR TE PUEDE COMPLICAR PORQUE ACA NO PODRAS OBTENER EL USUARIO QUE
ESTA ELIMINANDO,
PERO ESO LO RESUELVO AGREGANDO ESTA ELIMINACION EN EL PROCEDIMIENTO DE
ELIMINACION
===============================================================================

IF TG_OP='DELETE' THEN

INSERT INTO pacientes_auditados (pc_cod, pc_nombre, pc_apellidos,
pc_accion, pc_fecha, pc_equipo) VALUES (OLD.pc_cod,
OLD.pc_nombre,OLD.pc_apellido,2, fecha, equipo);
END IF;

RETURN NULL;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

===============================================================================
Este es el disparador

CREATE TRIGGER audita_pacientes_trg
AFTER INSERT OR UPDATE OR DELETE
ON pacientes
FOR EACH ROW
EXECUTE PROCEDURE audita_reserva_trg();
===============================================================================
--
Cesar Erices Vergara
Ingeniero en Gestión Informática
Analista de Sistema

Santiago - Chile

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ernesto Quiñones 2009-06-06 14:41:43 Re: Fwd: Idle time limit
Previous Message kervin licett 2009-06-06 13:46:22 Fwd: Ejemplo