Hola

On Tue, Nov 6, 2012 at 1:47 PM, Raul Andres Gutierrez Alejo <
[email protected]> wrote:

>  utiliza TG_OP para saber que esta haciendo
> http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html
>

Como veras lo uso.


>
>
> la estructura del triger debe algo parecida a:
> CREATE OR REPLACE FUNCTION  tr_datos_d()
>   RETURNS trigger AS
> $BODY$
> DECLARE
>  BEGIN
>     IF TG_OP = 'INSERT' THEN
>     -- ...
>         RETURN NEW;
>     END IF;
>      IF TG_OP = 'UPDATE' THEN
>     --- ...
>         RETURN  NEW;
>     END IF;
>
>     IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
>         -- ...
>         RETURN NEW;
>     END IF;
>
>     IF TG_OP = 'DELETE'THEN
>     --- ...
>         RETURN OLD;
>     END IF;
>  END;$BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
>
> El 06/11/2012 11:38 a.m., Juan escribió:
>
> Gente
>
>  Tengo un trigger declarado en una tabla, declarada de la sig. manera
>
>
>  -- Table: dato_d
>
>  -- DROP TABLE dato_d;
>
>  CREATE TABLE dato_d
> (
>   id bigserial NOT NULL,
>   fecha_alta timestamp without time zone NOT NULL,
>   fecha_baja timestamp without time zone,
>   fecha_ult_mod timestamp without time zone NOT NULL,
>   usuario_alta character varying(50) NOT NULL,
>   usuario_baja character varying(50),
>   usuario_ult_mod character varying(50) NOT NULL,
>   codigo character varying(30),
>   inactivo integer,
>   nombre character varying(255),
>   id_dominio bigint,
>   CONSTRAINT d_pkey PRIMARY KEY (id),
>   CONSTRAINT sdgdgdfgdfgdfgdFOREIGN KEY (id_dominio)
>       REFERENCES d (id) MATCH SIMPLE
>       ON UPDATE NO ACTION ON DELETE NO ACTION
> )
> WITH (
>   OIDS=FALSE
>  );
> ALTER TABLE dato_d
>   OWNER TO tsuser;
>
>  -- Trigger: tr_datos_d on dato_d
>
>  -- DROP TRIGGER tr_datos_dom ON dato_d;
>
>  CREATE TRIGGER tr_datos_d
>   BEFORE INSERT OR UPDATE OR DELETE
>   ON dato_d
>   FOR EACH ROW
>   EXECUTE PROCEDURE tr_datos_d();
>
>
>  PERO: en mi trigger tengo un if por delete or update or insert
>
>  segun entendi el trigger llama con un "parametro" NEW  u OLD
> representando la row que se altera,
> Para testear esta funcionalidad le hice un update
> update dato_d set fecha_baja = fecha_baja  ;
> No modifico nada, pero lo que motiva este corre es que algunas veces
> parece que el OLD y el NEW vienen en null
> de manera que si intento acceder a el campo id me sale el error 'valor no
> inicializado'
>
>  cualquier ayuda sera agradecido.
> saludos
>
>
>

Responder a