Tema: Cursores
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/11/2013, 21:56
valelvn
 
Fecha de Ingreso: junio-2013
Ubicación: Jujuy
Mensajes: 9
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Cursores

Hola huesos52 el código que hice es este:
Cita:
CREATE OR REPLACE FUNCTION Operaciones(fech_desde date, fech_hasta date)
RETURNS VOID AS $Op$
DECLARE
NroOp int; FecOp date; Total float; MatOd int; CodPa char(3);
OpCursor CURSOR(fech_desde date, fech_hasta date) FOR SELECT * FROM Encabezado_Oper;
BEGIN
OPEN OpCursor(fech_desde, fech_hasta);
LOOP
FETCH OpCursor INTO NroOp;
INSERT INTO OperacionesEspeciales SELECT * FROM Encabezado_Oper
WHERE FechaOperación BETWEEN fech_desde AND fech_hasta AND NroOperac <> NroOp;
EXIT WHEN NOT FOUND;
END LOOP;
CLOSE OpCursor;
END;
$Op$ LANGUAGE 'plpgsql';
cuando lo ejecuto no me marca ningún error, pero cuando ejecuto la función
Cita:
SELECT Operaciones('11/10/13','14/10/13');
me aparece esto:
Cita:
ERROR: llave duplicada viola restricción de unicidad «operacionesespeciales_pkey»
DETAIL: Ya existe la llave (nrooperac)=(107).
CONTEXT: sentencia SQL: «INSERT INTO OperacionesEspeciales SELECT * FROM Encabezado_Oper
WHERE FechaOperación BETWEEN fech_desde AND fech_hasta AND NroOperac <> NroOp»
función PL/pgSQL operaciones(date,date) en la línea 9 en sentencia SQL
********** Error **********

ERROR: llave duplicada viola restricción de unicidad «operacionesespeciales_pkey»
SQL state: 23505
Detail: Ya existe la llave (nrooperac)=(107).
Context: sentencia SQL: «INSERT INTO OperacionesEspeciales SELECT * FROM Encabezado_Oper
WHERE FechaOperación BETWEEN fech_desde AND fech_hasta AND NroOperac <> NroOp»
función PL/pgSQL operaciones(date,date) en la línea 9 en sentencia SQL