| From: | Andrés García G(dot) <garcia791107(at)gmail(dot)com> | 
|---|---|
| To: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Trigger no se ejecuta al cambiar datos en una tupla cuando hay datos en determinada columna | 
| Date: | 2007-05-31 17:43:21 | 
| Message-ID: | 474c7d9d0705311043g6760bd44kdd703c60e14d7eaf@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Saludos.
Tengo un problema con un trigger que he creado para una tabla.
esta es la definicion de la tabla:
CREATE TABLE mfacturas
(
  id_factura serial NOT NULL,
  folio character varying(30) NOT NULL,
  id_cliente integer NOT NULL,
  fecha date NOT NULL,
  total numeric(9,2),
  subtotal numeric(9,2),
  impuesto numeric(9,2),
  status character varying(10),
  observs bytea,
  afec_inv character(2) NOT NULL,
  dias_credito integer,
  condi_credito text,
  CONSTRAINT mfacturas_pkey PRIMARY KEY (id_factura),
  CONSTRAINT "$1" FOREIGN KEY (id_cliente)
      REFERENCES clientes (id_cliente) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT unq_mfacturas UNIQUE (folio)
) ;
la condicion en la que falla el Trigger es la siguiente
CREATE OR REPLACE FUNCTION ajustar_inv_mfacturas() RETURNS TRIGGER AS
$modificar_mfacturas$
  DECLARE
   cursor_dfacturas CURSOR (aux_folio VARCHAR(30) ) IS SELECT * FROM
dfacturas WHERE folio = aux_folio;
   rec_dfacturas dfacturas%ROWTYPE;
FOLIO_FACT VARCHAR(30);
BEGIN
  IF(TG_OP = 'UPDATE')OR(TG_OP = 'DELETE') THEN
       FOLIO_FACT = OLD.folio;
  END IF;
   OPEN cursor_dfacturas(FOLIO_FACT);
      *
      *
      *
      *
      *
/*
********************************************************************************************************
*/
IF (TG_OP = 'UPDATE')AND(OLD.status = 'P.CONTADO' OR OLD.status = 'P.CREDITO
')AND(OLD.afec_inv = 'SI')THEN
   LOOP
   FETCH cursor_dfacturas INTO rec_dfacturas;
   UPDATE refacciones SET existencia = existencia + rec_dfacturas.cantidad
WHERE id_refa = rec_dfacturas.id_refa;
   EXIT WHEN NOT FOUND;
   END LOOP;
  END IF;
/*
********************************************************************************************************
*/
      *
      *
      *
      *
      *
  CLOSE cursor_dfacturas;
 RETURN NULL;
END;
$modificar_mfacturas$ LANGUAGE plpgsql;
CREATE TRIGGER modificar_mfacturas
  AFTER INSERT OR UPDATE OR DELETE ON mfacturas
   /* FOR EACH ROW*/ EXECUTE PROCEDURE ajustar_inv_mfacturas();
lo que se hace aqui es sumar o restar la cantidad de piezas que se tomaron
para la factura y añadirla la existencia correspondiente de cada pieza en
inventario de almacen,
pero las instrucciones en esta condicion no se realizan cuando en los campos
dias_credito (dias de credito) y condi_credito (condiciones de credito)
tienen algun valor, no veo la razon por que no lo realiza, ojala puedan
ayudarme.
Nota: La aplicacion esta desarrollada en Delphi 7 con componentes ZeosLib
-- 
___________________
I.S.C. Andrés García G.
Omicron Sistemas
Leandro Valle 800 Local 2.
Col. Américas del Bajío, Celaya Guanajuato, Mexico.
Tel. (461)612-23-97. 044 461 1430093
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Arturo Munive | 2007-05-31 17:52:27 | implementacion de last() en el driver JDBC de postgresql | 
| Previous Message | José Fermín Francisco Ferreras | 2007-05-31 17:20:52 | RE: Pregunta sobre trigger |