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