Alvaro Herrera wrote:
Manuel A. Estevez Fernandez escribió:
juan wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">Manuel A. Estevez Fernandez escribió:
Me gustaria saber como puedo definir como un trigger sobre una tabla que cuando inserte cierto valor en una columna este cree el otro trigger que va a actuar sobre otra tabla, y una vez que haga un update a la primera tabla, el trigger elimine a otra funcion. .........
Perdona la respuesta, pero porque tienes que hacer esta práctica???

La tabla sobre la cual esta la funcion que envié, se ejecuta constantemente mientras que la otra tabla en donde se haranlos movimientos sera muy temporalmente. Así que no encuentro sentido a mantenerla ahi ejecutandose todo el tiempo. Ademas que no se que tanto pueda pegarle en el desempeño a mi sistema el tener que estar ejecutando un procedimiento inecesario todo el tiempo.

Lo que propones es peor idea, porque cada vez que haces CREATE TRIGGER o
DROP TRIGGER se toma un lock exclusivo en la tabla, y por lo tanto
impides que cualquier otra operacion concurrente pueda operar en la
tabla.

(A todo esto, el codigo del trigger que tienes no es muy bueno tampoco;
lo del select max() no funciona bien cuando tienes dos o mas ejecutando
concurrentemente el mismo codigo.  Usa currval() para obtener el valor
de una secuencia, de una columna que debes haber declarado con tipo
SERIAL.)
Hola Alvaro

Gracias por tus observaciones y disculpa todos mis errores en el código com mencione todavía soy novato en esto.
La estructura de las tablas s la siguiente :

CREATE TABLE marbetes
(
 id_marbete bigint NOT NULL,
 id_mueble smallint NOT NULL,
 id_inventario bigint NOT NULL,
 id_sucursal smallint NOT NULL,
 id_articulo bigint,
 costo numeric(9,3),
 descripcion text,
 codigo_barras text,
 cantidad smallint,
 id_estatus smallint,
CONSTRAINT marbetes_pkey PRIMARY KEY (id_marbete, id_mueble, id_inventario, id_sucursal),
 CONSTRAINT marbetes_fk_articulos FOREIGN KEY (id_articulo)
     REFERENCES articulos (id_articulo) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT marbetes_fk_muebles FOREIGN KEY (id_mueble, id_inventario, id_sucursal) REFERENCES muebles (id_mueble, id_inventario, id_sucursal) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE marbetes OWNER TO stvz;

CREATE TABLE ventas_detalle
(
 id_venta bigint NOT NULL,
 id_sucursal smallint NOT NULL,
 id_corte_caja bigint NOT NULL,
 numero_caja smallint NOT NULL,
 id_venta_detalle serial NOT NULL,
 id_esquema_impuesto smallint NOT NULL,
 id_esquema_oferta smallint NOT NULL,
 cantidad smallint NOT NULL,
 precio_venta_unidad_venta numeric(9,3),
 tipo_precio text,
 precio_regular_unidad_venta numeric(9,3),
 precio_chequeo_unidad_venta numeric(9,3),
 precio_oferta_unidad_venta numeric(9,3),
 kit text,
 id_kit smallint,
 factor numeric(9,3),
 costo_unitario_promedio numeric(9,3),
 cantidad_devuelta numeric(9,3),
 id_articulo bigint NOT NULL,
CONSTRAINT ventas_detalle_pkey PRIMARY KEY (id_venta, id_sucursal, id_corte_caja, numero_caja, id_venta_detalle),
 CONSTRAINT esquema_ofertas_fk_ofertas FOREIGN KEY (id_esquema_oferta)
     REFERENCES esquema_ofertas (id_esquema_oferta) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT venta_detalle_fk_esquema_impuesto FOREIGN KEY (id_esquema_impuesto)
     REFERENCES esquema_impuestos (id_esquema_impuesto) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION,
 CONSTRAINT ventas_detalle_fk_articulos FOREIGN KEY (id_articulo)
     REFERENCES articulos (id_articulo) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION,
 CONSTRAINT ventas_detalle_fk_kits FOREIGN KEY (id_kit)
     REFERENCES kits (id_kit) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_ventas FOREIGN KEY (id_venta, id_corte_caja, numero_caja, id_sucursal) REFERENCES ventas (id_venta, id_corte_caja, numero_caja, id_sucursal) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE ventas_detalle OWNER TO stvz;


Cabe mencionar que no puedo ponerle serial a los campos porque son llaves combinadas.
Quedo a la espera de sus observaciones.
Saludos


Manuel A. Estevez Fernandez
--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo 
agradecerán

Responder a