From: | Raúl Andrés Duque <raulandresduque(at)hotmail(dot)com> |
---|---|
To: | "WILLIAM PARRA" <wilparra(at)yahoo(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: No me funciona Trigger de Auditoria |
Date: | 2006-12-14 00:51:30 |
Message-ID: | BAY135-DAV18C39083917D9AC3C0F525BAD50@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
William, la ejecutaste tal cual?
Ten en cuenta que es un ejemplo "genérico" y que en la línea:
IF NEW. || cols.nombre || <> OLD. || cols.nombre || THEN
debes reemplazarla por tus PROPIOS campos ... por ejemplo
IF NEW.nombre <> OLD.nombre THEN
Revisa y entiende la función para que la adaptes a tus propias necesidades.
Atentamente,
RAUL DUQUE
Bogotá, Colombia
----- Original Message -----
From: WILLIAM PARRA
To: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Wednesday, December 13, 2006 7:27 PM
Subject: [pgsql-es-ayuda] No me funciona Trigger de Auditoria
Compañeros de lista:
No he logrado conseguir que funcione el siguiente trigger que tomé de la lista... Creo que lo Hizo Mario Soto.
CREATE OR REPLACE FUNCTION AUDITOR_TABLAS () RETURNS TRIGGER
AS '
DECLARE
CONSULTA varchar;
fecha timestamp;
tipo varchar;
cols record;
usuario varchar;
id integer;
pid integer;
columna varchar;
BEGIN
select into fecha current_timestamp(0);
-- INSERTA LA IP DEL EQUIPO DEL USUARIO
select into usuario inet_client_addr();
--select into usuario user;
select into pid pg_backend_pid();
IF TG_OP = ''INSERT'' THEN
tipo:=''I'';
select into id new.oid;
END IF;
IF TG_OP = ''UPDATE'' THEN
tipo:=''U'';
select into id old.oid;
END IF;
FOR cols IN
select attname as nombre,
attnum as numero
from pg_attribute
where attrelid = TG_RELID
and attnum > 0
and NOT attisdropped
LOOP
IF NEW. || cols.nombre || <> OLD. || cols.nombre || THEN
INSERT INTO auditoria (TIPO,FECHA,USUARIO,TABLA,CAMPO,NOMBRE1,NOMBRE2,NOMBRE3,PID)
values (tipo,fecha,usuario,TG_RELNAME,id,cols.nombre,cols.nombre,cols.nombre,pid);
END IF;
END LOOP;
RETURN NEW;
END;
'
LANGUAGE plpgsql;
Este es el script de la tabla de audoitoria
CREATE TABLE AUDITORIA
(
CODIGO_AUDITA serial NOT NULL,
TIPO CHAR(1),
FECHA TIMESTAMP,
USUARIO VARCHAR(20),
TABLA VARCHAR(30),
CAMPO VARCHAR(30),
PID VARCHAR(30)
)
/
Y el siguiente es el Trigger que cree sobre una tabla parentesco
CREATE TRIGGER AUDITOR_PARENTESCO
AFTER INSERT OR UPDATE OR DELETE ON PARENTESCO
FOR EACH ROW EXECUTE PROCEDURE AUDITOR_TABLAS();
Al tratar de efectuar un Insert en parentesco, este es el error que me saca...
Y realmente no sé de que se trate el error.
ERROR: record "old" is not assigned yet
Detail: The tuple structure of a not-yet-assigned record is indeterminate.
Line: 1
Y este el error cuando trato de efectuar un Delete
record "new" is not assigned yet
Detail: The tuple structure of a not-yet-assigned record is indeterminate.
Line: 1
Y este cuando trato de efectuar un Update
ERROR: syntax error at or near "||"
Line: 1
Gracias compañeros por sus aportes
Saludos,
Lo creo En Windows, y no saca error, pero cuando
William Enrique Parra Alba
Ingeniero De Sistemas
Universidad Pedagógica y Tecnológica de Colombia
/\ /\
/ //\\ \
\ \\// /
/ / \ \
\/ \/
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Gregorio Diaz | 2006-12-14 00:56:47 | Tablas temporales en RAM ? |
Previous Message | Raúl Andrés Duque | 2006-12-14 00:42:19 | Re: No funciona Dollar Quoting en Windows |