El 6 de junio de 2009 9:46, kervin licett <kerlj...@gmail.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

Responder a