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

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