From: | Lennin Caro <lennin(dot)caro(at)yahoo(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org, "Manuel A(dot) Estevez Fernandez" <stvzito(at)gmail(dot)com> |
Subject: | Re: problema con cursores |
Date: | 2009-03-03 22:34:06 |
Message-ID: | 797284.71296.qm@web59502.mail.ac4.yahoo.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 _][_
Primero no veo donde esta el mensaje de tu error o en que linea se genera
Segundo los errores que veo son
Como dice alvaro el
SELECT observaciones = observaciones + ',';
deberia ser
SELECT observaciones = observaciones || ',';
y lo otro es que estas usando el FETCH para que te muestre el resultado de un cursor por consola no para interactuar con el cursos.
DECLARE cur_conciliacion CURSOR FOR SELECT "2"
OPEN cur_conciliacion;
FETCH NEXT IN cur_conciliacion;
si no me equivoco deberia de ser asi
DECLARE cur_conciliacion CURSOR FOR SELECT "2"
DECLARE registro record;
OPEN cur_conciliacion;
FETCH NEXT FROM cur_conciliacion IN registro;
espero te sirva
From | Date | Subject | |
---|---|---|---|
Next Message | inf200476 | 2009-03-04 02:30:02 | PL/pgsql |
Previous Message | Alvaro Herrera | 2009-03-03 21:34:15 | Re: obtener semana segun el dia |