Skip site navigation (1) Skip section navigation (2)

Ayuda en creacion de trigger

From: Ricardo David Carrillo Sánchez <rcarrillosmx(at)yahoo(dot)com(dot)mx>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Ayuda en creacion de trigger
Date: 2006-01-25 19:30:37
Message-ID: 20060125193037.22389.qmail@web31011.mail.mud.yahoo.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Hola a todos!!!, 
Directo al grano, he tratado desde hace un pa de dìas
el realizar un trigger que me registre los movimientos
realizados en ciertas tablas, ahora bien, al realiarlo
como viene en los ejemplos de la documentacion online
y otros documentos que encontre respeto al tema, esto
es lo que pude realizar:


DROP TABLE ejemplo;
CREATE TABLE ejemplo
(
	nombre text,
	apellido text
);

CREATE FUNCTION audita() RETURNS trigger AS '
DECLARE
	log_db  record;
BEGIN
   IF TG_OP="DELETE" THEN
    INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),OLD.nombre,now(),TG_RELNAME,TG_OP);
    ELSE
    INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),NEW.nombre,now(),TG_RELNAME,TG_OP);
    END IF;
    RETURN NEW;
END;
 ' LANGUAGE plpgsql;

CREATE TRIGGER ejemplo BEFORE INSERT OR DELETE OR
UPDATE ON ejemplo
    FOR EACH ROW EXECUTE PROCEDURE audita();


para lo cual me manda un error del siquiente tipo: 
DROP TABLE
CREATE TABLE
psql:otro-trigger.psql:19: ERROR:  syntax error at or
near "$1" at character 14
QUERY:  INSERT INTO  $1 
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(), $2 ,now(), $3 , $4 )
CONTEXT:  SQL statement in PL/PgSQL function "audita"
near line 5
psql:otro-trigger.psql:19: LINE 1: INSERT INTO  $1 
(usuario,registro,fechayh,tabla,opera) valu...
psql:otro-trigger.psql:19:                      ^
psql:otro-trigger.psql:22: ERROR:  function audita()
does not exist





Por otro lado probe el ejemplo que viene en la
documentaciòn y de igual forma no me lo acepta :


CREATE TABLE empleados (
    empleado_nombre    text NOT NULL,
    salario            integer
);
CREATE TABLE empleados_audit(
    operacion         char(1)   NOT NULL,
    horafecha         timestamp NOT NULL,
    userid            text      NOT NULL,
    empleado_nombre   text      NOT NULL,
    salario integer
);
CREATE OR REPLACE FUNCTION procesa_empleados_audit()
RETURNS TRIGGER AS '
    BEGIN
    --
    -- Crea un registro en empleado_audit para
reflejar las operaciones
    -- realizadas en empleados utiliza las variables
especiales TG_OP
    -- para efectuar la operación
        IF (TG_OP == "DELETE") THEN
            INSERT INTO empleados_audit SELECT "D",
now(), user, OLD.*;
            RETURN OLD;
         ELSIF (TG_OP == "UPDATE") THEN
             INSERT INTO empleados_audit SELECT "U",
now(), user,
                      NEW.empleado_nombre,
NEW.salario;
             RETURN NEW;
         ELSIF (TG_OP == "INSERT") THEN
             INSERT INTO empleados_audit SELECT "I",
now(), user, NEW.*;
             RETURN NEW;
         END IF;
    RETURN NULL; -- el resultado es ignorado puesto
que este
                  -- es un trigger AFTER
    END;
' language plpgsql;
CREATE TRIGGER empleados_audit AFTER INSERT OR UPDATE
OR
         DELETE ON empleados FOR EACH ROW EXECUTE
PROCEDURE
    procesa_empleados_audit();


En verdad agradecerìa mucho cualquier orientación.
saludos.



:::::::::::::::::::::::::::::::::::::::::::::::
:: El éxito es una suma de fracasos.....     ::
:: el secreto está en no acostubrase a ambos ::
:::::::::::::::::::::::::::::::::::::::::::::::


	
	
		
___________________________________________________________ 
Do You Yahoo!? 
La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx 


In response to

Responses

pgsql-es-ayuda by date

Next:From: Ariel RomeroDate: 2006-01-25 20:39:17
Subject: Comparacion seria entre PostgreSQL y SQL Server
Previous:From: Xavier Vidal PieraDate: 2006-01-25 18:41:05
Subject: Re: manejo de case studio y postgresql

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group