Hola a todos, estoy investigando sobre excepciones en postgres, como puedo programar uno para que estire los mensajes desde la bd?.
agradezco cualquier información sobre esto.
Saludos
sirven para mostrar un mensaje y obortar la operacion dependiendo de la condicion a cumplir..puedes utilizar con el raise. Ej:
raise exception 'el mensaje que quieres!';
Si lo que deseas es capturar excepciones de validacion de negocio,
puedes utilizar un RAISE EXCEPTION 'texto', de lo contrario, si deseas capturar una excepcion del gestor como violacion de restricciones unique, not null, etc, puedes utilizar dentro de tu procedimiento algo similar a esto:
EXCEPTION
WHEN datatype_mismatch THEN
RETURN -1;
WHEN not_null_violation THEN
RETURN -2;
WHEN unique_violation THEN
RETURN -3;
WHEN foreign_key_violation THEN
RETURN -4;
WHEN check_violation THEN
RETURN -5;
como puedo atrapar excepciones en postgres de forma mas general por emjemplo al insertar un registro excepciones como campos nulo, campos sin dereferencia a claves foraneas pero de forma general es decir que me capture cualquier tipo de exception algo asi como el java que se puede usar Exception para capturar excepciones, pero en este caso en postgres, agradesco cualquier tipo de ayuda.... respuestas al mail hugorb@hotmail.com.
Hola Hugo, antes de responderte quería comentarte que no es "bueno" que pidas que te manden las respuestas a un determinado email. Aquí estamos para aprender y, por ello, lo más conveniente es compartir las distintas posibilidades de una pregunta.
Pero a lo que íbamos, en un procedimiento almacenado podrás capturar "todas" las excepciones de la siguiente forma:
sql := 'INSERT INTO.... ';
BEGIN
EXECUTE sql;
EXCEPTION
WHEN OTHERS THEN
RAISE EXCEPTION 'Falló la orden SQL: %. El error fue: %',sql,SQLERRM;
END;
Incluso tras el EXECUTE podrías capturar el nº de filas a las que afectó la orden SQL y añadir un "nivel de comprobación extra":
GET DIAGNOSTICS filasAfectadas = ROW_COUNT;
Y tras el END;:
IF filasAfectadas = 0 THEN
RAISE EXCEPTION 'La consulta % no falló, pero debería haber insertado 1 registro',sql;
END IF;
excepciones en postgres
Mar, 07/09/2010 - 21:28 — Anónimosirven para mostrar un mensaje y obortar la operacion dependiendo de la condicion a cumplir..puedes utilizar con el raise. Ej:
raise exception 'el mensaje que quieres!';
excepciones en postgres
Jue, 26/05/2011 - 17:09 — lgarciamSi lo que deseas es capturar excepciones de validacion de negocio,
puedes utilizar un RAISE EXCEPTION 'texto', de lo contrario, si deseas capturar una excepcion del gestor como violacion de restricciones unique, not null, etc, puedes utilizar dentro de tu procedimiento algo similar a esto:
EXCEPTION
WHEN datatype_mismatch THEN
RETURN -1;
WHEN not_null_violation THEN
RETURN -2;
WHEN unique_violation THEN
RETURN -3;
WHEN foreign_key_violation THEN
RETURN -4;
WHEN check_violation THEN
RETURN -5;
para mas informacion puedes consultar este link:
http://www.postgresql.org/docs/8.1/static/plpgsql-control-structures.htm...
Muchas gracias por
Lun, 30/05/2011 - 20:17 — LidiaMuchas gracias por contestar,me ha sido de gran utilidad...
Saludos
como atrapar cualquier tipo de excepciones
Jue, 23/06/2011 - 17:50 — Anónimocomo puedo atrapar excepciones en postgres de forma mas general por emjemplo al insertar un registro excepciones como campos nulo, campos sin dereferencia a claves foraneas pero de forma general es decir que me capture cualquier tipo de exception algo asi como el java que se puede usar Exception para capturar excepciones, pero en este caso en postgres, agradesco cualquier tipo de ayuda.... respuestas al mail hugorb@hotmail.com.
Atrapar cualquier excepción
Vie, 24/06/2011 - 14:01 — doctoreHola Hugo, antes de responderte quería comentarte que no es "bueno" que pidas que te manden las respuestas a un determinado email. Aquí estamos para aprender y, por ello, lo más conveniente es compartir las distintas posibilidades de una pregunta.
Pero a lo que íbamos, en un procedimiento almacenado podrás capturar "todas" las excepciones de la siguiente forma:
sql := 'INSERT INTO.... '; BEGIN EXECUTE sql; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Falló la orden SQL: %. El error fue: %',sql,SQLERRM; END;Incluso tras el EXECUTE podrías capturar el nº de filas a las que afectó la orden SQL y añadir un "nivel de comprobación extra":
Y tras el END;:
Un saludo.
Enviar nuevo comentario