Definisi Trigger
Seringkali dibutuhkan program yang dapat berjalan sendiri (dijalankan oleh system) sehingga tidak perlu dieksekusi oleh user. Program tersebut biasanya dibuat menggunakan timer yang diatur waktu untuk eksekusi sebuah program. Pada database SQL Server, untuk menjalan program secara otomatis (dieksekusi oleh system) dapat dibuat dengan mudah karena ada fasilitas Trigger. Dengan Trigger ini, program dapat dijalankan karena ada pemicu ketika insert/update/delete terhadap sebuah table. Program yang akan dijalankan otomatis dapat disimpan di Trigger berjenis Insert jika pemicunya adalah Insert, disimpan di Trigger berjenis Delete jika pemicunya adalah Delete, dan disimpan di Trigger berjenis Update jika pemicunya adalah Delete.
Trigger adalah batch/sekumpulan perintah yang secara otomatis dikerjakan ketika terjadi penyisipan (insert), pengubahan (update) atau penghapusan data (delete) pada sebuah tabel.
Trigger :
-Program seperti Store Procedure atau Function yang dijalankan oleh system
-Program ini menempel pada sebuah Tabel, berbeda dengan SP dan Function menempel pada Database
-Dijalankan oleh system jika ada pemicu yaitu Insert terhadap table, Delete ataupun Update.
Tabel Inserted dan Deleted
Saat sebuah trigger Insert dijalankan, maka akan diciptakan sebuah table “Inserted”. Tabel Inserted ini strukturnya akan sama dengan table induknya. Isi table Inserted ini adalah data yang sedang diinsertkan di table. Dengan demikian, kita dapat mengetahui data apa yang sedang diinsertkan ke dalam melalui table ini.
Untuk melihat apa yang di table Inserted dapat dilakukan perintah Select * from Inserted. Perintah ini harus ada didalam trigger Insert.
Nilai getdate() adalah fungsi untuk mengetahui tanggal dan jam system computer saat terjadi insert data pada table, Suser_Sname() adalah pengguna yang menginsert data.
sinkronisasi stok barang
1.TABEL BARANG(Kode(PK),Nama,Stok)
2.tabel jual (nofj,tglfj,kode(fk),qty,harga)
buat trigger untuk sinkronisasi stok
1. saat ada insert data pada tabel jual maka stok barang di tabel barang akan berkurang
2. update
3. delete
4. modifikasi tabel barang menjadi (Kode,Nama,Stok,Jual01,Jual02,Jual03,...,Jual12,
Qty01,Qty02,Qty03,...,Qty12)
buat trigger TrJual
1. update Jual01 dengan @Qty*@Harga saat ada insert/update pada tabel_jual bulan januari
2. update Qty01 dengan @Qty saat ada insert/update pada tabel_jual bulan januari
INSERT INTO [db_sinkronisasi_stok_barang].[dbo].[Tabel_Barang]
([Kode]
,[Nama]
,[Stok])
VALUES
('C','CCC','100')
select * from [dbo].[Tabel_Barang]
CREATE TRIGGER [dbo].[TrInsertData]
ON [dbo].[Tabel_Jual]
AFTER Insert
AS
BEGIN
declare @Kode NVARCHAR(10)
declare @Qty INT
SET NOCOUNT ON;
-- APA YG DIINSERT OLEH USER
SELECT @Kode=Kode,@Qty=Qty
FROM inserted
UPDATE Tabel_Barang
set Stok = Stok - @Qty
where Kode = @Kode
END
GO
insert into Tabel_Jual
values
CREATE TRIGGER [dbo].[TrUpdateData]
ON [dbo].[Tabel_Jual]
AFTER update
AS
BEGIN
declare @Kode NVARCHAR(10)
declare @QtyLama INT
declare @QtyBaru INT
SET NOCOUNT ON;
-- APA YG DIUPDATE OLEH USER
SELECT @QtyLama=Qty
FROM deleted
SELECT @QtyBaru=Qty,@Kode=Kode
FROM inserted
UPDATE Tabel_Barang
set Stok = Stok + @QtyLama - @QtyBaru
where Kode = @Kode
END
GO
update Tabel_Jual
set Qty = 5
where NoFJ = 'FJ3'
SELECT * FROM Tabel_Jual
SELECT * FROM Tabel_Barang
CREATE TRIGGER [dbo].[TrDeleteData]
ON [dbo].[Tabel_Jual]
AFTER delete
AS
BEGIN
declare @Kode NVARCHAR(10)
declare @Qty INT
SET NOCOUNT ON;
SELECT @Kode=Kode,@Qty=Qty
FROM deleted
UPDATE Tabel_Barang
set Stok = Stok + @Qty
where Kode = @Kode
END
GO
delete from Tabel_Jual
where NoFJ='FJ2'
SELECT * FROM Tabel_Jual
SELECT * FROM Tabel_Barang
4.
USE [db_sinkronisasi_stok_barang]
GO
/****** Object: Trigger [dbo].[TrJual] Script Date: 01/13/2011 11:22:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TrJual]
ON [dbo].[Tabel_Jual]
AFTER Insert
AS
BEGIN
declare @Kode NVARCHAR(10)
declare @Qty INT
declare @Harga MONEY
declare @TglFJ DATETIME
SET NOCOUNT ON;
SELECT @Kode=Kode,@Qty=Qty,@Harga=Harga,@TglFJ=TglFJ
FROM inserted
if(datepart(mm,@TglFJ)=1)
begin
update Tabel_Barang
set Jual01=Jual01+(@Qty*@Harga),Qty01=Qty01+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=2)
begin
update Tabel_Barang
set Jual02=Jual02+(@Qty*@Harga),Qty02=Qty02+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=3)
begin
update Tabel_Barang
set Jual03=Jual03+(@Qty*@Harga),Qty03=Qty03+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=4)
begin
update Tabel_Barang
set Jual04=Jual04+(@Qty*@Harga),Qty04=Qty04+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=5)
begin
update Tabel_Barang
set Jual05=Jual05+(@Qty*@Harga),Qty05=Qty05+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=6)
begin
update Tabel_Barang
set Jual06=Jual06+(@Qty*@Harga),Qty06=Qty06+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=7)
begin
update Tabel_Barang
set Jual07=Jual07+(@Qty*@Harga),Qty07=Qty07+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=8)
begin
update Tabel_Barang
set Jual08=Jual08+(@Qty*@Harga),Qty08=Qty08+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=9)
begin
update Tabel_Barang
set Jual09=Jual09+(@Qty*@Harga),Qty09=Qty09+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=10)
begin
update Tabel_Barang
set Jual10=Jual10+(@Qty*@Harga),Qty10=Qty10+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=11)
begin
update Tabel_Barang
set Jual11=Jual11+(@Qty*@Harga),Qty11=Qty11+@Qty
where Kode = @Kode
end
if(datepart(mm,@TglFJ)=12)
begin
update Tabel_Barang
set Jual12=Jual12+(@Qty*@Harga),Qty12=Qty12+@Qty
where Kode = @Kode
end
END
insert into tabel_jual (NoFJ,TglFJ,Kode,Qty,Harga)
values ('FJ2',getdate(),'A',10,5000)
select * from Tabel_Jual
select * from Tabel_Barang
4.2
alter TRIGGER [dbo].[TrJualUpdate]
ON dbo.Tabel_Jual
AFTER update
AS
BEGIN
declare @NoFJ varchar(50)
declare @TglFJ datetime
declare @Kode varchar(50)
declare @Qty int
declare @QtyBaru int
declare @Harga money
declare @HargaBaru money
Select @QtyBaru = Qty, @HargaBaru =Harga
from inserted
select @TglFJ=TglFJ, @Kode=Kode, @Qty=Qty, @Harga=Harga
from deleted
if (datepart(mm,@TglFJ)=1)
begin
update Tabel_Barang
set Jual01=Jual01 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty01=Qty01+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=2)
begin
update dbo.Tabel_Barang
set Jual02=Jual02 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty02=Qty02+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=3)
begin
update dbo.Tabel_Barang
set Jual03=Jual03 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty03=Qty03+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=4)
begin
update dbo.Tabel_Barang
set Jual04=Jual04 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty04=Qty04+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=5)
begin
update dbo.Tabel_Barang
set Jual05=Jual05 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty05=Qty05+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=6)
begin
update dbo.Tabel_Barang
set Jual06=Jual06 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty06=Qty06+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=7)
begin
update dbo.Tabel_Barang
set Jual07=Jual07 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty07=Qty07+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=8)
begin
update dbo.Tabel_Barang
set Jual08=Jual08 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty08=Qty08+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=9)
begin
update dbo.Tabel_Barang
set Jual09=Jual09 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty09=Qty09+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=10)
begin
update dbo.Tabel_Barang
set Jual10=Jual10 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty10=Qty10+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=11)
begin
update dbo.Tabel_Barang
set Jual11=Jual11 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty11=Qty11+@QtyBaru - @Qty
where kode= @Kode
end
if (datepart(mm,@TglFJ)=12)
begin
update dbo.Tabel_Barang
set Jual12=Jual12 +@QtyBaru*@HargaBaru - @Qty*@Harga, Qty12=Qty12+@QtyBaru - @Qty
where kode= @Kode
end
END
GO
UPDATE Tabel_Jual
SET [Qty] =50
WHERE NoFJ='FJ2'and Kode = 'A'
select * from Tabel_Jual
select * from Tabel_Barang
1.buat db+tabel
2.buat fungsi
-cek barang(Barang)
-cek pelanggan(pelanggan)
-cek rekap jual(Penjualan barang)
-cek fj(nofj)
3.buat trigger insert/update
trinsertfj/update
*update pelanggan.totaljual
trinsertfjdet/update
*update fj.totalfaktur
*update rekap jual(jan s/d des)
*update barang.stok
tbrekap jual(penjualan barang,jan,...,des)
tb fj(nofj,tglfj,pelanggan,totalfaktur)
tb fjdet(nofj,noseq,barang,qty,harga)
tb pelanggan(pelanggan,totaljual)
tb barang(barang,stok,total jual)
CREATE FUNCTION fCekbarang(@pBarang)
RETURNS bit
AS
BEGIN
DECLARE @pHasil bit
IF EXISTS (SELECT Barang FROM Barang WHERE Barang = @pBarang)
SET @pHasil = 1
ELSE
SET @pHasil = 0
RETURN @pHasil
END
CREATE FUNCTION fCekpelanggan(@pPelanggan)
RETURNS bit
AS
BEGIN
DECLARE @pHasil bit
IF EXISTS (SELECT Pelanggan FROM Pelanggan WHERE Pelanggan = @pPelanggan)
SET @pHasil = 1
ELSE
SET @pHasil = 0
RETURN @pHasil
END
CREATE FUNCTION fCekpelanggan(@pBarang)
RETURNS bit
AS
BEGIN
DECLARE @pHasil bit
IF EXISTS (SELECT Barang FROM RekapJual WHERE Barang = @pBarang)
SET @pHasil = 1
ELSE
SET @pHasil = 0
RETURN @pHasil
END
CREATE FUNCTION fCekpelanggan(@pNoFJ)
RETURNS bit
AS
BEGIN
DECLARE @pHasil bit
IF EXISTS (SELECT NoFJ FROM FJ WHERE NoFJ = @pNoFJ)
SET @pHasil = 1
ELSE
SET @pHasil = 0
RETURN @pHasil
END
CREATE TRIGGER trUpdateFJ
ON FJ
AFTER UPDATE
AS
BEGIN
DECLARE @Pelanggan varchar(2), @TotalLama money, @TotalBaru money
SELECT @TotalLama = Total, @Pelanggan = Pelanggan
FROM DELETED
SELECT @TotalBaru = Total
FROM INSERTED
UPDATE Pelanggan
SET Total = Total - @TotalLama + @TotalBaru
WHERE Pelanggan = @Pelanggan
END
CREATE TRIGGER trInsertFJDet
ON FJDet
AFTER INSERT
AS
BEGIN
DECLARE @NoFJ varchar(2), @Barang varchar(5), @Qty int, @Harga money, @TglFJ datetime
SELECT @NoFJ = NoFJ, @Barang = Barang, @Qty = Qty, @Harga = Harga
FROM INSERTED
SELECT @TglFJ = TglFJ FROM FJ WHERE NoFJ = @NoFJ
UPDATE FJ
SET Total = Total + (@Qty*@Harga)
WHERE NoFJ = @NoFJ
UPDATE Barang
SET Stok = Stok - @Qty, Total = Total + (@Qty*@Harga)
WHERE Barang = @Barang
IF NOT EXISTS(SELECT Barang FROM RekapJual WHERE Barang=@Barang)
BEGIN
INSERT INTO RekapJual(Barang)
VALUES (@Barang)
END
IF (datepart(mm, @TglFJ) = 1)
BEGIN
UPDATE RekapJual
SET Jan = Jan + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 2)
BEGIN
UPDATE RekapJual
SET Feb = Feb + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 3)
BEGIN
UPDATE RekapJual
SET Mar = Mar + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 4)
BEGIN
UPDATE RekapJual
SET Apr = Apr + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 5)
BEGIN
UPDATE RekapJual
SET May = May + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 6)
BEGIN
UPDATE RekapJual
SET Jun = Jun + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 7)
BEGIN
UPDATE RekapJual
SET Jul = Jul + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 8)
BEGIN
UPDATE RekapJual
SET Aug = Aug + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 9)
BEGIN
UPDATE RekapJual
SET Sep = Sep + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 10)
BEGIN
UPDATE RekapJual
SET Oct = Oct + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 11)
BEGIN
UPDATE RekapJual
SET Nov = Nov + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 12)
BEGIN
UPDATE RekapJual
SET Dec = Dec + @Qty
WHERE Barang = @Barang
END
END
CREATE TRIGGER trUpdateFJ
ON FJ
AFTER UPDATE
AS
BEGIN
DECLARE @Pelanggan varchar(2), @TotalLama money, @TotalBaru money
SELECT @TotalLama = Total, @Pelanggan = Pelanggan
FROM DELETED
SELECT @TotalBaru = Total
FROM INSERTED
UPDATE Pelanggan
SET Total = Total - @TotalLama + @TotalBaru
WHERE Pelanggan = @Pelanggan
END
CREATE TRIGGER trInsertFJDet
ON FJDet
AFTER INSERT
AS
BEGIN
DECLARE @NoFJ varchar(2), @Barang varchar(5), @Qty int, @Harga money, @TglFJ datetime
SELECT @NoFJ = NoFJ, @Barang = Barang, @Qty = Qty, @Harga = Harga
FROM INSERTED
SELECT @TglFJ = TglFJ FROM FJ WHERE NoFJ = @NoFJ
UPDATE FJ
SET Total = Total + (@Qty*@Harga)
WHERE NoFJ = @NoFJ
UPDATE Barang
SET Stok = Stok - @Qty, Total = Total + (@Qty*@Harga)
WHERE Barang = @Barang
IF NOT EXISTS(SELECT Barang FROM RekapJual WHERE Barang=@Barang)
BEGIN
INSERT INTO RekapJual(Barang)
VALUES (@Barang)
END
IF (datepart(mm, @TglFJ) = 1)
BEGIN
UPDATE RekapJual
SET Jan = Jan + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 2)
BEGIN
UPDATE RekapJual
SET Feb = Feb + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 3)
BEGIN
UPDATE RekapJual
SET Mar = Mar + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 4)
BEGIN
UPDATE RekapJual
SET Apr = Apr + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 5)
BEGIN
UPDATE RekapJual
SET May = May + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 6)
BEGIN
UPDATE RekapJual
SET Jun = Jun + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 7)
BEGIN
UPDATE RekapJual
SET Jul = Jul + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 8)
BEGIN
UPDATE RekapJual
SET Aug = Aug + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 9)
BEGIN
UPDATE RekapJual
SET Sep = Sep + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 10)
BEGIN
UPDATE RekapJual
SET Oct = Oct + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 11)
BEGIN
UPDATE RekapJual
SET Nov = Nov + @Qty
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 12)
BEGIN
UPDATE RekapJual
SET Dec = Dec + @Qty
WHERE Barang = @Barang
END
END
CREATE TRIGGER trUpdateFJDet
ON FJDet
AFTER UPDATE
AS
BEGIN
DECLARE @NoFJ varchar(2), @Barang varchar(5), @QtyLama int, @QtyBaru int, @HargaLama money, @HargaBaru money, @TglFJ datetime
SELECT @QtyLama = Qty, @HargaLama = Harga
FROM DELETED
SELECT @NoFJ = NoFJ, @Barang = Barang, @QtyBaru = Qty, @HargaBaru = Harga
FROM INSERTED
SELECT @TglFJ = TglFJ FROM FJ WHERE NoFJ = @NoFJ
UPDATE FJ
SET Total = Total - (@QtyLama*@HargaLama) + (@QtyBaru*@HargaBaru)
WHERE NoFJ = @NoFJ
UPDATE Barang
SET Stok = Stok + @QtyLama - @QtyBaru, Total = Total - (@QtyLama*@HargaLama) + (@QtyBaru*@HargaBaru)
WHERE Barang = @Barang
IF NOT EXISTS(SELECT Barang FROM RekapJual WHERE Barang=@Barang)
BEGIN
INSERT INTO RekapJual(Barang)
VALUES (@Barang)
END
IF (datepart(mm, @TglFJ) = 1)
BEGIN
UPDATE RekapJual
SET Jan = Jan - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 2)
BEGIN
UPDATE RekapJual
SET Feb = Feb - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 3)
BEGIN
UPDATE RekapJual
SET Mar = Mar - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 4)
BEGIN
UPDATE RekapJual
SET Apr = Apr - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 5)
BEGIN
UPDATE RekapJual
SET May = May - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 6)
BEGIN
UPDATE RekapJual
SET Jun = Jun - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 7)
BEGIN
UPDATE RekapJual
SET Jul = Jul - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 8)
BEGIN
UPDATE RekapJual
SET Aug = Aug - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 9)
BEGIN
UPDATE RekapJual
SET Sep = Sep - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 10)
BEGIN
UPDATE RekapJual
SET Oct = Oct - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 11)
BEGIN
UPDATE RekapJual
SET Nov = Nov - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
IF (datepart(mm, @TglFJ) = 12)
BEGIN
UPDATE RekapJual
SET Dec = Dec - @QtyLama + @QtyBaru
WHERE Barang = @Barang
END
END
bisa gak itu si upload di blog. seperti di gramedia. kita mau liahat buku terus dimasukkan key word nah bisa di update terus di blog jadi custumer bisa tahu posisannya stock barang di toko kita...itu gmn carannya ya
BalasHapus