Dari manual yang bagus:
36.1. Ikhtisar Perilaku Pemicu
[...]
Untuk pemicu tingkat baris, data masukan juga menyertakanNEWbaris untukINSERTdanUPDATEpemicu, dan/atauOLDbaris untukUPDATEdanDELETEpemicu. Pemicu tingkat pernyataan saat ini tidak memiliki cara untuk memeriksa setiap baris yang dimodifikasi oleh pernyataan.
Dan dari Prosedur Pemicu:
NEW
Tipe dataRECORD; variabel memegang baris database baru untukINSERT/UPDATEoperasi di pemicu tingkat baris. Variabel ini adalahNULLdalam pemicu tingkat pernyataan dan untukDELETEoperasi.
Perhatikan apa yang dikatakan tentang pemicu tingkat baris dan pemicu tingkat pernyataan.
Anda memiliki pemicu tingkat pernyataan:
...
FOR EACH STATEMENT
EXECUTE PROCEDURE f_log_datei();
Pemicu tingkat pernyataan dipicu sekali per pernyataan dan pernyataan dapat diterapkan ke beberapa baris sehingga gagasan baris yang terpengaruh (itulah yang NEW dan OLD tentang) sama sekali tidak berlaku.
Jika Anda ingin menggunakan NEW (atau OLD ) di pemicu maka Anda ingin pemicu dijalankan untuk setiap baris yang terpengaruh dan itu berarti Anda menginginkan pemicu tingkat baris:
CREATE TRIGGER log_datei AFTER INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH ROW
EXECUTE PROCEDURE f_log_datei();
Saya baru saja mengubah FOR EACH STATEMENT ke FOR EACH ROW .
Pemicu Anda juga harus mengembalikan sesuatu:
Fungsi pemicu harus mengembalikan
NULLatau nilai record/baris yang memiliki struktur tabel yang persis sama dengan pemicu pemicunya.
[...]
Nilai kembalian pemicu tingkat baris dipicuAFTERatau pemicu tingkat pernyataan memicuBEFOREatauAFTERselalu diabaikan; mungkin juga nol. Namun, salah satu jenis pemicu ini mungkin masih membatalkan seluruh operasi dengan memunculkan kesalahan.
Jadi Anda harus RETURN NEW; atau RETURN NULL; di pemicu Anda. Anda memiliki pemicu AFTER sehingga tidak masalah RETURN mana yang Anda gunakan, tetapi saya akan menggunakan RETURN NEW; .