1

我有插入一些值到一些表中的函数 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;
4

1 回答 1

1

您不能ROLLBACK来自触发器或函数,因为在函数内不可能进行事务控制。

您实际上想要的是在异常后跳过并继续。根据手册,您可以使用BEGIN ... EXCEPTIONPL/PgSQL 中的块来执行此操作。这在内部使用子事务,就像and一样。SAVEPOINTROLLBACK TO SAVEPOINT

于 2015-05-29T01:41:04.050 回答