16 April 2013

Menciptakan SQL Trigger Untuk Membuat Transaksi Penjualan

ads


Pada gambar diatas merupakan gambaran dari beberapa table yang saling terkait satu sama lain. dimana table saling terintegrasi antara table barang degan table jual dan table jual dengan table transaksi . Untuk lebih jelasnya mengenai Integritas reference dapat dibaca pada tutorial reference dan foreign key.
Pada tutorial kali ini saya akan memngemukaan sebuah kasus :
Umpamakan sebuah mini market yang belum memiliki sebuah sistem informasi transaksi penjualan . Agar sistem berjalan dengan baik maka pihak admin harus meng inputkan data barang dimana spesifik data yg diinpukan adalah kd_barang, jenis_barang, nama_barang, stock, harga_modal, harga_jual.
Pada saat konsumen berbelanja pada mini market tersebut dan akan membayar maka pihak teler akan melakukan kalkulasi terhadap jumlah barang dan jenis barang yang di beli konsument ,dengan bantuan sistem komputer maka pihak teler hanya butuh menginputkan kd_barang dan jumlah maka sistem akan berkerja secara otomatis menghitung transaksi yang terjadi dan menyimpanya dalam database dengan nama table transaksi.
Pertanyaan:
**Bagai mana penerapan sistem tersebut hanya mengunakan SQL TRIGGET.....?
Berikut langkah-lankah nya:

1. Menyiapkan database dan beberapa table [barang|jual|transaksi]


Table : barang


CREATE TABLE IF NOT EXISTS `barang` (
`kd_barang` int(10) NOT NULL,
`jenis_barang` varchar(35)  NOT NULL,
`nama_barang` varchar(50)  NOT NULL,
`stock` int(15) NOT NULL,
`harga_modal` int(10) NOT NULL,
`harga_jual` int(10) NOT NULL,
PRIMARY KEY (`kd_barang`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `barang` 
(`kd_barang`,`jenis_barang`,`nama_barang`,`stock`,
 `harga_modal`, `harga_jual`)
VALUES
(111, 'Odol', 'Close-up', 10, 2500, 3200),
(112, 'Mie', 'Supermi', 18, 950, 1300),
(113, 'Odol', 'Pepsoden', 12, 2400, 3100);
Table : jual
CREATE TABLE IF NOT EXISTS `jual` (
`kd_jual` int(12) NOT NULL auto_increment,
`kd_barang` int(12) NOT NULL,
`jumlah` int(11) NOT NULL,
PRIMARY KEY (`kd_jual`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
Table : transaksi
CREATE TABLE IF NOT EXISTS `transaksi` (
`kd_barang` int(10) NOT NULL,
`kd_jual` int(11) NOT NULL,
`total` int(11) NOT NULL,
`tgl_jual` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2. Menyiapkan SQL TRIGGER Transaksi


Trigger: triggertransaksi


DELIMITER //
CREATE TRIGGER triggertransaksi
AFTER INSERT ON jual
FOR EACH ROW
BEGIN
DECLARE harga INT ;
SELECT harga_jual INTO harga
FROM barang WHERE kd_barang = new.kd_barang ;
insert into transaksi values(new.kd_jual,(harga*new.jumlah),curdate()) ;
END ;
//
DELIMITER ;

3. Bagimana Aksi yang Dilakukan Oleh SQL Diatas


Dapat diuji dengan perintah2 berikut:
1. insert into (kd_barang,jumlah) values (111,4) ;

Maka secara otomatis pada saat data yang diinputkan pada table jual akan diproses oleh script trigger diatas dan menyimpanya ke dalam table transaksi. Jadi terdapat 2 penginputan data dalam satu kali proses yaitu jual dan transaksi buktikan :

2. Select * from jual; 


3. Select * from transaksi ; 

4. Melakukan Query antara table Jual dengan tabel transaksi ;

   select * from jual natural join transaksi ;

5. Membuat TRIGGER UPDATE


DELIMITER //
CREATE TRIGGER triggerupdate
BEFORE UPDATE ON barang
FOR EACH ROW
BEGIN
UPDATE jual set kd_barang = NEW.kd_barang WHERE kd_barang=OLD.kd_barang;
END ;
//
DELIMITER ;

Bagimana Aksi yang dilkukan oleh SQL diatas dapat diuji dengan perintah2 berikut:
1. Select * from barang ;
2. Select * from jual ;
Perhatikan kedua table tersebut dengan nama field kd_barang sekarang langkah selanjutnya adalh mengubah kd_barang dengan perintah dibawah ini : 3. update barang set kd_barang=333 where kd_barang=111 ;
Maka hasilnya akan berubah field kd_barang pada masing2 table yaitu mengubah kode barang dimana sebelumnya memiliki nilai 111 setelah di update dari table
barang dengan nilai baru 333 maka table jualpun juga dirubah .. berikut hasilnya dapat dilihat pada gambar :


7. Membuat TRIGGER DELETE


DELIMITER //
CREATE TRIGGER triggerdelete
BEFORE DELETE ON barang
FOR EACH ROW
BEGIN
Delete from jual where kd_barang = OLD.kd_barang ;
END ;
//
DELIMITER ;

Perintah 2 yang dapat di gunakan adalah sebagai berikut :
1. delete from barang where kd_barang = 333 ;
2. select * from barang ;
3. select * from jual ;



Special Thanxs to http://www.trali.net

Menciptakan SQL Trigger Untuk Membuat Transaksi Penjualan Rating: 4.5 Diposkan Oleh: kreasi

 

Top