2015-05-28 94 views
0

我有一些函數insert_val可以在某些表中插入一些值。這些表具有觸發器,當出現錯誤時會引發異常。當觸發器產生異常並轉到下一個curs1時,我該如何回滾函數?在此先感謝postgreSQL 9.4如何從觸發器回滾

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; 

回答

0

你不能ROLLBACK從觸發器或功能,因爲交易的控制是不可能的職能範圍內。

你實際上似乎想要的是在異常之後跳過並繼續。您可以使用PL/PgSQL中的BEGIN ... EXCEPTION塊,per the manual執行此操作。在內部,它使用像SAVEPOINTROLLBACK TO SAVEPOINT那樣的子交換。