Uso del Commit y Rollback en postgres

Tengo un proceso en la base de datos de Postgres el cual realiza unas consultas e insert, pero al ejecutae el commit el proceso falla

BEGIN
DECLARE
V_VALOR INT;
v_id INT DEFAULT 0;
v_fk_vigencia INT;
v_fk_id_tercero VARCHAR(30);
v_nombre_completo VARCHAR(30);v_id_error INT;
v_impuesto_liquidado INT;
v_max_id INT;
v_caracter VARCHAR(1);
CODE INT;
MSG VARCHAR(200);
v_procesado INT;
DIAN CURSOR FOR
SELECT id,fk_vigencia,fk_id_tercero,nombre_completo,direccion,telefono,codigo_ciiu,ingresos_brutos
FROM siatfisc_tem_dian
WHERE estado = 'A';
BEGIN
BEGIN
SELECT COALESCE(count(*),0) INTO v_total_registros FROM siatfisc_tem_dian WHERE estado = 'N';
EXCEPTION WHEN OTHERS THEN
v_error = 'Se presentaron inconvenientes al Momento de Totalizar el Archivo de la Dian';
END;
BEGIN
INSERT INTO global_tm_terceros(pk_id_tercero,dig_verificacion,fk_id_tipo_contribuyente,fk_id_naturaleza,fk_id_tipo_documento,fk_id_actividad_economica,fk_id_pais_dpto_mun,nombre_completo,direccion,telefono,user_at)
values (a.fk_i_tercero,0,1,1,'CC',a.codigo_ciiu,a.nombre_completo,a.direccion,a.telefono,'luchito');
EXCEPTION WHEN OTHERS THEN
CODE:=SQLCODE;
MSG:= SQLERRM;
ROLLBACK;
v_procesado=1;
INSERT INTO siatfisc_tem_log (Proceso,fecha,codigo_error,error) values('Cargue Datos global_tm_terceros',now(),CODE,MSG);
COMMIT;
v_error = 'Se presentaron errores en el proceso de creacion del tercero '||CODE||' Mensaje = '||MSG;
END;
IF v_procesado=1 THEN
ROLLBACK;
INSERT INTO siatfisc_tem_log (Proceso,fecha,codigo_error,error) values('Actualizacion estado DIAN',now(),CODE,MSG);
COMMIT;
v_error = 'Se presentaron errores en La ejecucion del Proceso, por lo anterior se reversa toda la transaccion'||CODE||' Mensaje = '||MSG;
ELSE
COMMIT;
v_error = 'El proceso de cargue de Archivo de la DIAN, se ha realizo satisfactoriamente, ahor ase debe realzar el Cargue del Archivo de Industria y Comercio';
END IF;
return v_error;
END;

Generando el siguiente error

Error de SQL:

ERROR:  cannot begin/end transactions in PL/pgSQL
HINT:  Use a BEGIN block with an EXCEPTION clause instead.
CONTEXT:  PL/pgSQL function siatfisc_pro_cargadatos_dian() line 132 at SQL statement

Añade tu respuesta

Haz clic para o