我想捕获引发的错误,将一些与该错误相关的信息记录到表(INSERT ErrorLog ...)
中,并将错误引发回调用方。我不希望回滚记录的信息,如何我能做到吗?我们正在运行Postgres 8.3版
DECLARE
text_var1 text;
text_var2 text;
text_var3 text;
INSERT INTO mytab(firstname, lastname) VALUES('Tom', 'Jones');
BEGIN
UPDATE mytab SET firstname = 'Joe' WHERE lastname = 'Jones';
x := x + 1;
y := x / 0;
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT,
text_var2 = PG_EXCEPTION_DETAIL,
text_var3 = PG_EXCEPTION_HINT;
INSERT ErrorLog(message, detail) values(text_var1, text_var2);
RAISE EXCEPTION 'Error Occured %\n%', text_var1, text_var2;
RETURN x;
END;
答案 0 :(得分:0)
这是不可能的,因为您引发的异常(在捕获另一个异常之后)会回滚事务,因此也会termGroup.name
块中的INSERT
进行回滚。这样,该函数也不会返回任何内容。
解决方法包括:
EXCEPTION
而不是WARNING
。