我有一个函数insert_val,它将一些值插入一些表中。这些表具有触发器,在发生问题时会引发异常。当触发器引发异常并转到下一个curs1时,如何回滚函数,这是可能的吗?提前感谢
res :='start';
OPEN curs1 FOR SELECT temp3.fid FROM temp3;
LOOP
FETCH curs1 INTO fidVar;
EXIT WHEN NOT FOUND;
BEGIN
if raise_exception then
rollback;
end if;
perform insert_val(fidVar,startDate,endDate);
END;
END LOOP;
发布于 2015-05-28 17:41:04
您不能从触发器或函数中ROLLBACK
,因为在函数中事务控制是不可能的。
实际上,您想要的是跳过并在异常之后继续。您可以使用PL/PgSQL,根据手册中的BEGIN ... EXCEPTION
块来完成这一任务。在内部,这使用子事务,就像SAVEPOINT
和ROLLBACK TO SAVEPOINT
一样。
https://stackoverflow.com/questions/30510502
复制