problema con cursores

From: "Manuel A(dot) Estevez Fernandez" <stvzito(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: problema con cursores
Date: 2009-03-03 18:16:13
Message-ID: 19d91cd00903031016v1816a05ak42a887552ca21476@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mi necesidad es la siguiente, tengo que insertar una gran cantidad de
registros dentro de una tabla (conciliacion_inventario) y luego tengo que
tomar todos aquellos registros que indican diferencias, y buscar en que
partes de otra tabla coinciden los registros y regresar a un campo de
observaciones la posicion de las diferencias, para realizar esta tarea
decidi utilizar un trigger que cambie las observaciones y coloque el lugar
donde se encuentra la diferencia. Cabe mencionar que tengo poca experiencia
en manejo de base de datos... y me dijeron que deberia utilizar cursores
para poder manejar todos esos registros por que si no solo se aplicaria el
cambio al primer registro insertado.
mis tablas son de la siguiente manera:
conciliacion_inventario(id_conciliacion,id_inventario,id_sucursal,id_articulo,cantidad_conteo,cantidad_sistema,diferencia,observaciones)
marbetes(id_marbete,id_mueble,id_inventario,id_sucursal,id_articulo,cantidad)

y esta es la funcion donde tengo problemas:

CREATE FUNCTION marbetear_conciliacion()
RETURNS TRIGGER
AS $funcion$

DECLARE
cur_conciliacion CURSOR FOR SELECT
ci.id_articulo,(m.id_mueble||'-'||m.id_marbete) AS observaciones FROM
marbetes m, conciliacion_inventario ci WHERE ci.direnciancia<>0 AND
ci.id_articulo=m.id_articulo GROUP BY
ci.id_articulo,m.id_mueble,m.id_marbete ORDER BY ci.id_articulo;

BEGIN

IF(TG_OP='INSERT') THEN
OPEN cur_conciliacion;
FETCH NEXT IN cur_conciliacion;
WHILE(FOUND)LOOP
BEGIN
SELECT observaciones = observaciones + ',';

UPDATE conciliacion_inventario SET observaciones =
(observaciones + observaciones)
WHERE NEW.id_articulo=ci.id_articulo;

FETCH NEXT IN cur_conciliacion ;
END;
END LOOP ;
CLOSE cur_conciliacion;
END IF;

END;
$funcion$ LANGUAGE 'plpgsql';

Espero que pudieran decirme donde esta mi error o ayudarme a buscar otra
solucion.
De antemano gracias y que en espera de sus comentarios

--
by:

Manuel Alejandro Estevez Fernandez

_][_ Stvz _][_

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel A. Estevez Fernandez 2009-03-03 18:21:08 problema con cursores
Previous Message Alvaro Herrera 2009-03-03 17:54:35 Re: cambio de codificacion