hola a todos
tengo el siguiente procedimiento almacenado
create or replace function sp_insert_buquesPoliticaSalarial(p_perspective_id
bigint,
p_buque_clave
bigint,
p_pt_clave
bigint,
p_deb_basicos_clave
bigint [],
p_deb_comp_clave
bigint [],
p_acum_variables_clave bigint [],
p_tarifas_varias_clave bigint [],
p_lsi_clave
bigint [],
p_user_creator
text)
returns integer as
$$
declare
rows_affected integer := 0;
begin
-- insertando debengos básicos
for i in 1..array_length(p_deb_basicos_clave, 1) loop
insert into co0060ca01scae (
fk503_co0030ca02scaa_clave,
fk474_co0010ca01scaa_clave,
fk639_co0040ca02scaa_clave,
perspective_id,
user_creator)
values
(p_deb_basicos_clave [i], p_buque_clave, p_pt_clave,
p_perspective_id, p_user_creator);
rows_affected := rows_affected + 1;
end loop;
-- insertando debengos complementarios
for i in 1..array_length(p_deb_comp_clave, 1) loop
insert into co0060ca01scaf (
fk543_co0030ca02scab_clave,
fk474_co0010ca01scaa_clave,
fk639_co0040ca02scaa_clave,
perspective_id,
user_creator)
values (p_deb_comp_clave [i], p_buque_clave, p_pt_clave,
p_perspective_id, p_user_creator);
rows_affected := rows_affected + 1;
end loop;
-- insertando tarifas varias
for i in 1..array_length(p_tarifas_varias_clave, 1) loop
insert into co0060ca01scaj (
fk514_co0030ca02scac_clave,
fk639_co0040ca02scaa_clave,
fk474_co0010ca01scaa_clave,
perspective_id,
user_creator)
values (p_tarifas_varias_clave [i], p_pt_clave, p_buque_clave,
p_perspective_id, p_user_creator);
rows_affected := rows_affected + 1;
end loop;
-- insertando acumulaciones variables
for i in 1..array_length(p_acum_variables_clave, 1) loop
insert into co0060ca01scam (
fk1338_co0030ca04scad_clave,
fk639_co0040ca02scaa_clave,
fk474_co0010ca01scaa_clave, perspective_id,
user_creator)
values (p_acum_variables_clave [i], p_pt_clave, p_buque_clave,
p_perspective_id, p_user_creator);
rows_affected := rows_affected + 1;
end loop;
-- insertando LSI
for i in 1..array_length(p_lsi_clave, 1) loop
insert into co0060ca01scal (
fk525_co0030ca02scae_clave,
fk639_co0040ca02scaa_clave,
fk474_co0010ca01scaa_clave,
perspective_id,
user_creator)
values (p_lsi_clave, p_pt_clave, p_buque_clave, p_perspective_id,
p_user_creator);
rows_affected := rows_affected + 1;
end loop;
exception when raise_exception
then
begin
rows_affected := 0;
rollback ;
end;
return rows_affected
end;
$$
language plpgsql;
el problema es que al final necesito capturar si hubo algún error en cualquiera
de los insert que estoy haciendo dentro de los cilos, en caso tal de haber al
menos 1 error, necesito hacer rollback para que si en los cilos anteriores se
insertó algo poner todo en el estado anterior…
pienso que con excepciones puedo determinar cuando hubo un error, el tema es
que no sé qué tipo de escepción poner para el caso general, porque no sé en
Postgres cómo puedo capturar más de una excepción.
mi proc almacenado es el anterior, pero no sé si está correcto para lo que
quiero hacer con las excepciones ni si es la mejor forma de hacerlo
algun criterio por favor ???
saludos cordiales
=============================================
"El tamaño de tus logros depende del tamaño de tus metas."
C++ and Qt Senior Developer
Lic. Computer Science
Buenos Aires, Argentina