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