manajemen stock dengan trigger database

Upload: shelly-yudha-fischarina

Post on 18-Jul-2015

1.027 views

Category:

Documents


4 download

TRANSCRIPT

Manajemen Stock Dengan Trigger DatabaseTulisan ini mengulas tentang manajemen stock atau inventory dan tidak membahas bagaimana menghitung Total ataupun subtotal. Untuk manajemen stock dibuat menggunakan trigger database. Privilege yang dibutuhkan CREATE TRIGGER. Ada lima tabel yang digunakan yaitu MASTER_BARANG, ORD, ORD_DETAIL, SALES dan SALES_DETAIL. Rancangan tabel seperti pada gambar.

Ketentuan

Barang yang akan dibeli atau dijual harus ada di tabel MASTER_BARANG Pembelian akan menambah stock barang Penjualan akan mengurangi stock barang Quantity (QTY) penjualan dan pembelian boleh diupdate dan otomatis akan mempengaruhi jumlah stock di

MASTER_BARANG 1. MEMBUAT TABEL DAN CONSTRAINT

CREATE TABLE MASTER_BARANG ( KODE_BRG NAMA_BRG HARGA STOCK CREATE TABLE ORD( NO_ORDER NUMBER(4) PRIMARY KEY, NUMBER(4) PRIMARY KEY, VARCHAR2(20) NOT NULL, NUMBER(10), NUMBER(4));

ID_SUPPLIER NUMBER(4) NOT NULL, TGL_ORDER RP_TOTAL DATE, NUMBER(12));

CREATE TABLE ORDER_DETAIL( NO_ORDER NO_URUT KODE_BRG HARGA QTY SUBTOTAL NUMBER(4) REFERENCES ORD(NO_ORDER), NUMBER(3), NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG), NUMBER(10), NUMBER(4), NUMBER(10));

CREATE TABLE SALES( NO_SALES ID_CUST TGL_SALES RP_TOTAL NUMBER(4) PRIMARY KEY, NUMBER(4) NOT NULL, DATE, NUMBER(12));

CREATE TABLE SALES_DETAIL( NO_SALES NO_URUT KODE_BRG HARGA QTY SUBTOTAL NUMBER(4) REFERENCES SALES(NO_SALES), NUMBER(3), NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG), NUMBER(10), NUMBER(4), NUMBER(10));

2. MEMBUAT TRIGGER DATABASE Trigger UPDATE_STOCK_BRG_ORD Buat trigger update_stock_brg_ord di tabel order_detail Yang berfungsi untuk mengupdate stock di tabel master_barang jika ada pembelian barang atau perubahan qty di tabel order_detail.

CREATE OR REPLACE TRIGGER update_STOCK_brg_ord BEFORE INSERT OR UPDATE OF QTY ON order_detail FOR EACH ROW BEGIN IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN UPDATE MASTER_BARANG SET STOCK = STOCK + (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; ELSE UPDATE MASTER_BARANG SET STOCK = STOCK - (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; END IF; END; /Trigger UPDATE_STOCK_BRG_SALES Buat trigger update_stock_brg_sales di tabel sales_detail yang berfungsi untuk mengupdate stock di tabel master_barang jika ada penjualan barang atau perubahan qty di tabel sales_detail.

CREATE OR REPLACE TRIGGER update_STOCK_brg_sales

BEFORE INSERT OR UPDATE OF QTY ON sales_detail FOR EACH ROW BEGIN IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN UPDATE MASTER_BARANG SET STOCK = STOCK - (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; ELSE UPDATE MASTER_BARANG SET STOCK = STOCK + (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; END IF; END; /3. ISI DATA KE TABEL Isi master_barang dengan beberapa barang dengan kolom stock di set 0 sebagai data awal.

INSERT INTO MASTER_BARANG VALUES(100,PERMEN,1000,0); INSERT INTO MASTER_BARANG VALUES(200,BUKU,2500,0); INSERT INTO MASTER_BARANG VALUES(300,ROTI,1500,0); -- Lihat isi data BARANG select * from MASTER_BARANG; KODE_BRG NAMA_BRG HARGA STOCK

---------- ---------- ------ ------100 PERMEN 200 BUKU 300 ROTI 1000 2500 1500 0 0 0

4. PEMBELIAN, PENJUALAN dan UPDATE Lakukan pembelian untuk semua barang permen 200, buku 100, roti 100 Proses pembelian disini berarti Anda mengisi data ke tabel ORD dan ORDER_DETAIL

-- Isi dulu tabel ORD INSERT INTO ORD VALUES(1,100,SYSDATE,600000);

--Isi tabel ORD_DETAIL INSERT INTO ORDER_DETAIL VALUES(1,2,200,2500,100,250000); INSERT INTO ORDER_DETAIL VALUES(1,3,300,1500,100,150000); INSERT INTO ORDER_DETAIL VALUES(1,1,100,1000,200,200000);

--Lihat data di ORD_DETAIL SELECT * FROM ORDER_DETAIL;

NO_ORDER NO_URUT

KODE_BRG HARGA

QTY

SUBTOTAL

-------- ------- ---------- ------ --- ---------1 1 1 2 3 1 200 300 100 2500 100 1500 100 1000 200 250000 150000 200000

--Periksa stock pada tabel master_barang select * from MASTER_BARANG;

KODE_BRG NAMA_BRG

HARGA

STOCK

---------- ---------- ------ ------100 PERMEN 200 BUKU 300 ROTI 1000 2500 1500 200 100 100

-- Semua stock barang sudah bertambah sesuai jumlah order.Lakukan penjualan barang permen 20, buku 10, roti 50. Proses penjualan disini berarti Anda mengisi data ke tabel SALES dan SALES_DETAIL

--Isi tabel SALES INSERT INTO SALES VALUES (1,222,SYSDATE,120000); 1 row created.

--Isi tabel SALES_DETAIL INSERT INTO SALES_DETAIL VALUES(1,1,100,1000,20,20000); INSERT INTO SALES_DETAIL VALUES(1,2,200,2500,10,25000); INSERT INTO SALES_DETAIL VALUES(1,3,300,1500,50,75000);

--Lihat isi tabel SALES_DETAIL select * from SALES_DETAIL;

NO_SALES NO_URUT KODE_BRG

HARGA QTY

SUBTOTAL

-------- ------- -------- ------ ----- -------1 1 100 1000 20 20000

1 1

2 3

200 300

2500 1500

10 50

25000 75000

--Lihat stock di tabel MASTER_BARANG select * from MASTER_BARANG;

KODE_BRG NAMA_BRG

HARGA

STOCK

---------- ---------- ------ ------100 PERMEN 200 BUKU 300 ROTI 1000 2500 1500 180 90 50

--Stock berkurang sesuai dengan jumlah penjualan.Demikian pembahasan sederhana tentang manajemen stock (inventory) dengan menggunakan trigger database. Silahkan dikembangkan sesuai dengan keperluan Anda. Salam Bambang Sutejo

http://www.klik-oracle.web.id/?p=13

Kali ini saya akan memperkenalkan apa itu Trigger, kalo diartikan dala B.Indonesia trigger yaitu pemicu. Trigger (pemicu) ini merupakan jenis khusus yang melakukan prosedur yang tersimpan secara otomatis saat pengguna mencoba membuat pernyataan data-modifikasi yang ditentukan pada tabel. Microsoft SQL Server memungkinkan penciptaan beberapa trigger(pemicu) untuk setiap pernyataan yang diberikan INSERT, UPDATE, atau DELETE.

Misalnya saya punya 2 tabel, tabel barang dan tabel pembelian, untuk lebih jelasnya bisa dilihat pada gambar dibawah ini. Dalam tabel barang tersebut ada nama barang dan jumlah stock , IDEnya adalah ketika tabel pembelian ditambahkan, jumlah stock barang akan terupdate secara otomatis.misalnya ketika barang A dibeli sejumlah 3 buah maka nanti stock barang akan bertambah 3 secara otomatis. proses tersebut bisa dilakukan dgn trigger

=> ini contoh tablenya, nama table bisa diganti sesuai selera Langsug saja saya contohkan Syntax programnya :Tapi ini kita buat tabelnya dulu yaa....create table BARANG ( BAR_ID int not null, BAR_NAMA varchar(255) not null, BAR_STOCK int null default 0, constraint PK_BARANG primary key (BAR_ID) ) go create table PEMBELIAN ( PEM_ID int not null, BAR_ID int null , PEM_JUMLAH int null , constraint PK_PEMBELIAN primary key (PEM_ID) ) go create index RELATION_FK on PEMBELIAN (BAR_ID) go alter table PEMBELIAN add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID) references BARANG (BAR_ID) go

INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,AQUA); INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,TOTAL); INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,AQUADES);

Setelah anda menjalankan syntax tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong. 3 data di tabel barang tersebut secara defaut stocknya adalah 0. Kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntax trigger tersebut adalah sebagai berikut.

create trigger tambahStockbarang on pembelian for insert as update b set b.bar_stock = b.bar_stock + i.pem_jumlah from barang b join inserted i on b.bar_id = i.bar_id arti dari kode tersebut adalah sebagai berikut create trigger tambahStockbarang on pembelian

membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian for insert as perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete) for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for update b set b.bar_stock = b.bar_stock + i.pem_jumlah from barang b join inserted i on b.bar_id = i.bar_id ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadian delete kita coba masukkan kode berikut INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4); INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2); INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1); arti kode tersebut pem_id haruslah beda karena merupakan primary key beli aqua(kode bar_id=1) sebanyak 4 beli aquades (kode bar_id=3) sebanyak 2 beli aqua lagi sebanyak 1 sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2 karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini sama seperti gambar di bawah.

Yah memang agag susah, tapi kalo syntax nya sucses...?! bbeeeseneng banget.. oh ya hati-hati dengan penulisan nama table nya loh, biasanya berpengaruh, kalo gag ati-ati bisa eror lagi nanti.

http://pena-fiefi.blogspot.com/2011/05/membuat-trigger.html

Trigger adalah salah satu Transact-SQL code yang intinya secara otomatis mengeksekusi suatu task (insert, update dan delete) pada suatu object apabila ada DML(Data Manipulation language) yang dieksekusi pada object tertentu..... supaya lebih mudah kita asumsikan ada 2 tabel yaitu table stock dan table transaksi penjualan. pada tabel stok terdapat nama barang dan stoknya. kemudian terjadi penjualan barang pada table transaksi penjualan , maka secara otomatis jumlah stock barang pada table barang akan berkurang. untuk lebih mudah , mari kita coba untuk membahas bagaimana cara membuat trigger. sebelumnya kita create dulu Database dan beberapa tabel untuk uji coba trigger

(!) note : Pembuatan database yang akan kita gunakan disini semata-mata untuk mempermudahdalam memahami cinta satu sama lain trigger, sehingga akan dibuat se-ngawurse-simpel mungkin dan tanpa memperhatikan normalisasi. sedangkan untuk normalisasi sendiri akan sama-sama kita bahas di thread lain... hehe Querynya : DatabasenyaCREATE DATABASE TOKO_PINTAR

Tabelnya CREATE DATABASE TOKO_PINTARUSE TOKO_PINTAR GO CREATE TABLE Product ( kode_product INT Identity (20110,1), nama_barang Varchar(100), stok int ) CREATE TABLE Pembelian ( kode_pembelian INT Identity (11020,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT ) CREATE TABLE Penjualan ( kode_penjualan INT Identity (11020400,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT )

USE TOKO_PINTAR

GO INSERT INTO Product VALUES ('Flashdisk 16 GB','20'), ('Processor Quad Core','30') , ('Mouse','15')

hasilnya

nah sekarang mari kita coba untuk membuat Trigger pada table Pembelian USE TOKO_PINTAR GOCreate trigger tr_pembelian on pembelian for insert,update as IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang) update PD set PD.stok = PD.stok + i.jumlah from Product PD join inserted i on PD.nama_barang= i.nama_barang ELSE INSERT Product (nama_barang ,stok)SELECT i3.nama_barang,i3.jumlah FROM inserted i3 UPDATE pembelian SET kode_product = P.kode_product FROM Product P JOIN pembelian ON pembelian.nama_barang = P.nama_barang

kita coba untuk Insert Row baru namun dengan nama barang yang sudah ada di tabel ProductINSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Flashdisk 16 GB','2')

mari kita lihat hasilnya

sekarang kita coba untuk insert barang baru lewat tabel pembelianINSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Hardisk Eksternal 1 TB','35')

berikut adalah trigger untuk penjualan USE TOKO_PINTAR GOCREATE trigger tr_penjualan on penjualan for insert,update as IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang) update PD set PD.stok = PD.stok - i.jumlah from Product PD join inserted i on PD.nama_barang= i.nama_barang ELSE SELECT 'barang dengan nama '+i2.nama_barang + ' tidak dapat ditemukan dalam database' FROM inserted i2 UPDATE penjualan SET kode_product = P.kode_product FROM Product P JOIN penjualan ON penjualan.nama_barang = P.nama_barang

Sekarang mari kita insert penjualan INSERT INTO Penjualan(nama_barang,jumlah) VALUES('Flashdisk 16 GB','10')

nah..berikut mari kita lihat hasilnya

http://grahitanusantara.blogspot.com/2011/04/sql-server-trigger.html