Trigger no se ejecuta al cambiar datos en una tupla cuando hay datos en determinada columna

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: Raw Message | Whole Thread | 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

Responses

Browse pgsql-es-ayuda by date

  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