manejo de errores

From: Freddy Martinez Garcia <freddy311082(at)gmail(dot)com>
To: PostgreSQL Lista Castellano <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: manejo de errores
Date: 2015-05-19 16:54:00
Message-ID: 1B391487-E06B-4E45-AEE8-C7CC92E04348@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2015-05-19 17:32:25 Re: manejo de errores
Previous Message Gilberto Castillo 2015-05-19 15:22:38 Re: Error usando FDW de Neo4j con PostgreSQL 9.2.7 en CentOS 7