Saya memiliki fungsi insert_val yang memasukkan beberapa nilai ke dalam beberapa tabel. Tabel ini memiliki pemicu yang menimbulkan pengecualian ketika ada sesuatu yang salah. Bagaimana saya bisa mengembalikan fungsi setiap kali pemicu memunculkan pengecualian dan pergi ke curs1 berikutnya apakah ini mungkin? Terima kasih sebelumnya

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
Suzy Tros 28 Mei 2015, 18:11

1 menjawab

Jawaban Terbaik

Anda tidak dapat ROLLBACK dari pemicu atau fungsi, karena kontrol transaksi tidak dimungkinkan dalam fungsi.

Apa yang sebenarnya Anda inginkan adalah melewati dan melanjutkan setelah pengecualian. Anda dapat melakukannya menggunakan blok BEGIN ... EXCEPTION di PL/PgSQL, sesuai manual. Secara internal ini menggunakan subtransaksi seperti SAVEPOINT dan ROLLBACK TO SAVEPOINT.

0
Craig Ringer 29 Mei 2015, 04:41