Trigger dalam database berfungsi sebagai pemicu otomatis terhadap suatu event (kejadian).Database yang bisa menggunakan trigger adalah database yang memiliki engine. Seperti contoh sql server (microsoft), mysql (opensource). Baru-baru ini saya mengalamikendala dengan trigger dengan gambaran struktur data yang digunakan adalah sebagai berikut:
Tabel INOVICE
NoInvoice (PK)
KdCust
...
Jumlah
Indeks
Total
Bayar
Sisa (Jumlah*Indeks-bayar)
Tabel Bayar
NoInvoice (PK)
Tanggal (PK)
Bayar
secara mekanisme yang digunakan adalah apabila tabel bayar terisi maka secara otomatis akan memicu trigger untuk mengisi tabel invoice pada field bayar.
berikut ini adalah triggernya
CREATE TRIGGER BayarToInvoice ON [dbo].[BAYAR] FOR INSERT, UPDATE, DELETE AS
DECLARE @NOINVOICE AS CHAR(4),
@NREC Int,
@BAYAR DECIMAL
SELECT @NOINVOICE = e.NOINVOICE, @
NREC = Count(*),
@BAYAR = SUM(e.Bayar)
FROM Bayar e INNER JOIN inserted i ON e.NOINVOICE = i.NOINVOICE
GROUP BY e.NOINVOICE
IF (@NREC > 0)
BEGIN
UPDATE INVOICE SET
BAYAR = @BAYAR WHERE NOINVOICE = @NOINVOICE
END
Setelah ditest pada saat pengisian tabel bayar maka secara otomatis table bayar pada invoice akan ter-isi dengan benar sesuai dengan entry pada tabel bayar.Namun ada sesuatu yang aneh. Pada saat update pada tabel invoice (bukan dipicu trigger) isi field bayar pada invoice ter-isi dengan jumlah dari bayar untuk nomor invoice yang sama dikali dengan jumlah record pada tabel bayar dengan nomor invoice yang sama.Berarti ada bug pada trigger tersebut. Setelah saya analisa dengan baik maka triggernya saya rubah menjadi
CREATE TRIGGER BayarToInvoice ON [dbo].[BAYAR] FOR INSERT, UPDATE, DELETE AS
DECLARE @NOINVOICE AS CHAR(4),
@NREC Int,
@BAYAR DECIMAL
SELECT @NOINVOICE = e.NOINVOICE
FROM inserted e
SELECT @NOINVOICE = e.NOINVOICE,
@BAYAR = SUM(e.Bayar)
FROM Bayar e Where
e.NOINVOICE = @NOINVOICE
Group By e.NoInvoice
IF ISNULL(@BAYAR,0) <> 0
BEGIN
UPDATE INVOICE
SET BAYAR = @BAYAR
WHERE NOINVOICE = @NOINVOICE
END
Perhatikan bedanya. Ini mungkin sudah pernah menjadi kendala bagi anda.
Semoga bermanfaat
Sumber : http://elohansenp.blogspot.co.id/2010/11/trigger.html
nice info post, The Presidents Executive karaoke purwokerto
BalasHapus