Download - Laprak sbd
BAB I
Pendahuluan
1.1 Dasar Teori
A. Stored Procedure dan Trigger
Untuk efisiensi penulisan program dan meningkatkan keandalan hasil proses, MySQL
menyediakan fasilitas stored procedure dan trigger yang dapat dimanfaatkan dengan
mudah. Berikut akan diberikan penjelasan tentang kedua fasilitas tersebut.
Stored Procedure
Stored procedure adalah prosedur (seperti subprogram dalam bahasa pemrograman) yang
disimpan di dalam database.
MySQL mendukung dua jenis subprogram, yaitu:
stored procedure yang dapat dipanggil untuk dieksekusi,
fungsi yang menghasilkan nilai yang dapat dipakai dalam statemen SQL lain.
Dengan stored procedure eksekusi menjadi cepat, dan tidak ada kompilasi. Peningkatan
kecepatan datang dari reduksi lalu-lintas jaringan. Jika ada pekerjaan pengecekan
berulang, looping, multiple statement, dikerjakan dengan pemanggilan tunggal ke
prosedur yang telah disimpan ke server.
Stored procedure adalah komponen. Andaikan aplikasi kemudian ditulis dalam bahasa
berbeda, tidak ada masalah, karena logika berada didalam database bukan dalam aplikasi.
Stored procedure ditulis dalam SQL, bersifat portable dan dapat dijalankan pada setiap
platform dimana MySQL dapat dijalankan.
Trigger
Trigger adalah sebuah Script MySQL Command yang memicu suatu kejadian dalam
database MySQL berupa aksi manipulasi database secara otomatis setelah syarat tertentu.
Lokasi penulisan Trigger adalah di dalam database yang bersangkutan.
The trigger_event dapat berupa salah satu dari tiga kejadian berikut:
1. INSERT: trigger akan diaktifkan jika suatu baris baru disisipkan ke dalam tabel;
sebagai contoh, melalui pernyataan INSERT, LOAD DATA, dan REPLACE.
2. UPDATE: trigger diaktifkan jika suatu baris dimodifikasi; sebagai contoh, melalui
pernyataan UPDATE.
1
3. DELETE: trigger diaktifkan jika suatu baris dihapus dari tabel; sebagai contoh,
melalui pernyataan DELETE dan REPLACE. Pernyataan DROP TABLE dan
TRUNCATE TABLE pada tabel tidak mengaktifkan trigger ini, karena keduanya
tidak menggunakan DELETE.
Sebagai contoh setelah insert pada tabel_a dan kolom a1 maka akan otomatis insert pada
tabel_b pada kolom b1. Begitu pula untuk aksi update dan delete.
Contoh pemakaian trigger adalah sebagai berikut:
1. Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam
sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
2. Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi
perubahan, secara otomatis akan menyimpan ke tabel log.
3. Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data
tersebut disimpan.
Berikut ini bentuk umum perintah untuk membuat triggers:
CREATE TRIGGER name
[BEFORE|AFTER][INSERT|UPDATE|DELETE]
ON tablename
FOR EACH ROW statement
Keterangan dari bentuk umum perintah membuat trigger:
name, nama trigger mengikuti peraturan penamaan variabel / identifier dalam
MySQL
[BEFORE|AFTER] digunakan untuk menentukan kapan proses secara otomatis
akan dieksekusi, sebelum atau sesudah proses.
[INSERT|UPDATE|DELETE] digunakan untuk menentukan event (proses)
yang dijadikan trigger (pemicu) untuk menjalankan perintah-perintah di dalam
triggers.
tablename, merupakan nama tabel dimana trigger berada.
statement, merupakan sekumpulan perintah atau query yang akan secara otomatis
dijalankan jika event / proses yang didefinisikan sebelumnya aktif.
Statement atau perintah dalam trigger dapat berupa satu perintah saja, dan dapat juga
beberapa perintah sekaligus. Jika terdapat beberapa perintah dalam trigger, maka gunakan
perintah BEGIN dan END untuk mengawali dan mengakhiri perintah.
2
Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah
proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record
yang akan diproses (insert atau update), sedangkan OLD digunakan untuk mengakses
record yang sudah diproses (update atau delete).
Suatu trigger adalah jenis stored procedure special. Dikatakan special karena ia tidak
dipanggil langsung sebagaimana suatu stored prosedur. Perbedaan utama diantara trigger
dan stored procedur ialah bahwa trigger dipanggil secara otomatis jika suatu modifikasi
data terjadi pada suatu tabel, sementara untuk stored procedure harus dipanggil secara
eksplisit.
Untuk menghapus trigger, dapat menggunakan perintah DROP TRIGGER dengan
diikuti dengan nama tabel dan nama triggernya. Berikut ini bentuk umum dan contoh
perintah untuk menghapus trigger.
Bentuk umum dan contoh menghapus trigger:
DROP TRIGGER tablename.triggername;
Delimeter
Delimiter adalah karakter atau string yang memberi tahu MySQL bahwa kita telah selesai
menulis statemen SQL. Sebelumnya, delimiter selalu semicolon (tanda ;). Hal ini
diperlukan karena stored procedure terdiri atas sejumlah statemen, dan setiap pernyataan
harus diakhiri dengan semicolon.
Delimeter dapat diubah misalnya dengan karakter | atau dengan karakter //. Yang perlu
diperhatikan ialah bahwa setelah penggantin tersebut, lakukan pengubahan kembali
delimeter ke karakter yang sebelumnya, yaitu berupa karakter ;.
B. Penggunaan Stored Procedure dan Trigger
1. Persiapan
Sebagai persiapan perlu dilakukan pengecekan versi dari MySQL yang digunakan,
dengan cara sebagai berikut:
SHOW VARIABLES LIKE 'version';
atau
3
SELECT VERSION();
Dari tampilan di atas terlihat versi MySQL yang digunakan adalah ‘5.5.28’, berarti
strored procedure akan dapat bekerja.
Untuk latihan pembuatan stored procedure dan trigger akan disiapkan empat table,
yaitu: test1, test2, test3, dan test4.
Adapun field dari masing-masing tabel dapat dilihat dilihat dari perintah create
sebagai berikut:
Untuk keperluan latihan pembuatan trigger, pada posisi awal tabel yang akan diisi
ialah test3 dan test4.
4
Dari mana a4 terisi? Untuk test1 dan test2 sementara masih belum diisi data.
2. Stored Procedure
Berikut akan diberikan contoh pembuatan stored prosedur yang eksekusinya akan
terjadi apabila stored prosedur tersebut dipanggil dengan menggunakan CALL.
Prosedur dengan nama tampiltest4 berikut hanya berisi perintah untuk menampilkan
isi tabel test4 (di tulis diantara BEGIN … END).
Tahapan perintah untuk pembuatan prosedur tersebut adalah sebagai berikut:
Perhatikan perintah-perintah tersebut di atas diawali dengan pemberian delimeter
berupa tanda //, dan diakhiri dengan pengembalian delimeter ke tanda ;.
Berikut adalah perintah untuk memanggil prosedur tampiltest4 agar dilaksanakan
eksekusi, dan hasilnya diberikan pada tampilan pada baris-baris berikutnya.
5
3. Trigger
Sebelum dilakukan pembuatan trigger perlu disusun skenario apa yang dirancang
akan dilaksanakan secara otomatis apabila trigger tersebut dieksekusi.
Misal dari keempat tabel yang sudah diberikan sebelumnya, yaitu: tets1, test2, tetst3,
dan test4 dirancang suatu respon sebagai berikut:
Jika terjadi INSERT terhadap tabel test1, maka sebelumnya akan dilaksanakan
sebagai berikut:
Semua data yang diisikan ke dalam tabel test1 juga disisipkan ke dalam tabel
test2.
Hapus record di test3 jika isi a3 = a1 (yang dimaksud adalah a1 yang baru).
Update nilai dari b4 di dalam test4 dengan rumus b4 = b4 + 3 jika nilai b4 = a1
(yang dimaksud adalah a1 yang baru).
Pertama di-create dulu trigger dengan nama isitabel yang disesuaikan dengan
ketentuan di atas.
Di dalam penulisan di atas untuk delimeter digunakan tanda |.
Untuk melihat efek yang dihasilkan dari trigger di atas, sebelumnya dilakukan insert
data ke dalam tabel test1. Hasil insert data kemudian ditampilkan untuk dicek.
6
Efek yang ditimbulkan dengan adanya insert di atas, yang dilaksanakan oleh trigger
ialah berubahnya isi tabel test3 dan isi tabel test4 sesuai dengan ketentuan yang
diberikan sebelumnya.
Periksa tampilan data tersebut, dan cek hasilnya.
7
1.2 Permasalahan
Suatu gudang perusahaan menyimpan barang persediaan untuk dijual kepada umum.
Barang-barang yang disimpan di gudang diperoleh dari pengiriman oleh distributor.
Jika barang kiriman datang, otomatis stock akan bertambah, demikian juga apabila
ada barang yang keluar dari gudang karena terjual, maka otomatis stock akan
berkurang.
Rancang pemanfaatan stored procedur dan atau trigger untuk pengolahan data
persediaan di gudang suatu perusahaan.
8
BAB II
Pembahasan
2.1 Soal
Rencana pemanfaatan stored procedure dan atau trigger untuk pengelolahan data persediaan
di gudang suatu perusahaan dapat dilakukan dengan langkah-langkah berikut:
1. Pembuatan database
Dalam laporan ini dibuat suatu database dari toko kelontong. Database ini berguna bagi
pemilik dalam memantau ketersediaan barang di tokonya. Dengan terpantaunya
ketersediaan barang di suatu toko maka toko tersebut dapat menghindari kehabisan stok
maupun terjadinya over stocking. Database toko ini dibuat dengan menggunakan
perintah create database sebagai berikut:
24010314120059>create database tokokelontong;Query OK, 1 row affected (0.16 sec)
2. Pembuatan tabel-tabel
Setelah database terbentuk, selanjutnya dibuat tabel-tabel yang dibutuhkan dalam
database tersebut. Dalam database ini akan terdapat 3 buah tabe yaitu tabel persediaan,
tabel barang_masuk dan tabel barang_keluar. Ketiga tabel ini memilki atribut yang
sama yaitu Id_barang, nama barang, harga dan jumlah. Id_barang digunakan sebagai
primary key sehingga tidak aka nada barang yang memiliki ID yang sama. Id_barang
terdiri dari 5 buah karakter. Atribut nama barang menggunakan type varchar karena
kemungkinan panjang setiap nama barang yang variatif. Sedangkan atribut jumlah dan
harga diberikan type integer unsigned karena menyatakan jumlah dan harga yang tidak
mungkin bernilai negative. Semua atribut ini tidak boleh kosong (NOT NULL).
Sebelum membuat tabel maka harus dipilih database yang akan digunakan, yaitu
database tokokelontong
24010314120059>use tokokelontong;Database changed
a. Pembuatan tabel persediaan
9
Tabel persediaan ini akan berisi data-data barang yang tersedia dalam toko tersebut. Isi
tabel ini akan berubah sesuai dengan perubahan yang terjadi dalam tabel barang_masuk
dan tabel barang_keluar. Jadi jika jumlah barang tertentu bertambah pada tabel masuk
dan berkurang pada tabel keluar, maka akan terjadi perubahan pula dalam tabel
persediaan. Untuk membuat tabel persediaan dapat dilakukan dengan pernitah sebagai
berikut:
24010314120059>create table persediaan -> (id_barang CHAR(5) PRIMARY KEY, -> namabarang VARCHAR(25) NOT NULL, -> harga INT UNSIGNED NOT NULL, -> jumlah INT UNSIGNED NOT NULL) -> ;Query OK, 0 rows affected (0.26 sec)
b. Pembuatan tabel barang_masuk
Tabel ini akan berisi data-data jumlah barang yang dari distributor yang baru saja
dipasok. Dengan adanya perubahan data pada tabel ini maka data pada tabel persediaan
pun akan ikut berubah (bertambah). Untuk membentuk tabel ini dapat dilakukan dengan
perintah sebagai berikut:
24010314120059>CREATE TABLE barang_masuk -> (id_barang CHAR(5) PRIMARY KEY, -> namabarang VARCHAR(25) NOT NULL, -> harga INT UNSIGNED NOT NULL, -> jumlah INT UNSIGNED NOT NULL) -> ;Query OK, 0 rows affected (0.19 sec)
c. Pembuatan tabel barang_keluar
Tabel ini akan berisi data-data jumlah barang yang telah dibeli oleh pelanggan. Karena
dilakukan pembelian maka jumlah barang persediaan pun akan ikut berkurang. Jadi jika
terjadi perubahan data pada tabel barang keluar ini maka akan terjadi perubahan pula
pada tabel persediaan. Untuk membentuk tabel ini dapat dilakukan dengan perintah
sebagai berikut:24010314120059>CREATE TABLE barang_keluar -> (id_barang CHAR(5) PRIMARY KEY, -> namabarang VARCHAR(25) NOT NULL, -> harga INT UNSIGNED NOT NULL, -> jumlah INT UNSIGNED NOT NULL) -> ;Query OK, 0 rows affected (0.20 sec)
3. Pengisian tabel
10
Pertama kita isi di notepad dengan data barang:"A001","DAIA 100gr", 8500, 8"A002","RINSO 100gr", 8900, 10"B001","PEPSODENT 160gr", 8000, 6"B002","RITADENT 160gr", 7600, 8"A003","CIPTADENT 160gr", 10000, 9Kemudian kita ketik perintah dibawah ini pada MySQL:24010314120059>LOAD DATA LOCAL INFILE 'C:\\data\\databarang.txt' -> INTO TABLE persediaan -> FIELDS TERMINATED BY ',' -> ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n' -> ;Query OK, 2 rows affected (0.02 sec)Records: 5 Deleted: 0 Skipped: 3 Warnings: 0Setelah dilakukan penginputan data pada tabel persediaan, hasilnya akan diperoleh tabel
sebagai berikut:
Diasumsikan tabel barang masuk dan tabel barang keluar belum terisi data.
4. Pembuatan stored procedure
Prosedur ini diberi nama show persediaan dimana prosedur ini berisi perintah untuk
menampilkan isi tabel persediaan yang ditulis diantara begin….end. Sebelum membuat
stored procedure harus dilakukan pengaturan delimeternya, yaitu dari yang awalnya
semicolon(;) menjadi //. Kemudian didefinisikan prosedur-prosedurnya. Setelah
pembuatan stored procedure, delimeter harus dikembalikan pada karakter semula yaitu
semicolon (;). 24010314120059>\d //24010314120059>CREATE PROCEDURE show_persediaan() -> BEGIN -> SELECT * FROM persediaan; -> END -> //Query OK, 0 rows affected (0.61 sec)Stored prosedur dapat diimplementasikan dengan menggunakan perintah call diikuti
dengan nama prosedurnya sebagai berikut.
11
5. Pembuatan trigger
Dalam program ini akan terdapat dua trigger untuk pengurangan dan penambahan
jumlah persediaan.
a. Trigger update_persediaan
Jika pasokan barang datang dari distributor maka data akan dimasukkan dalam tabel
barang masuk. Dengan adanya pertambahan data pada barang masuk akan
mengakibatkan perubahan (penambahan) jumlhah barang pada tabel persediaan. Trigger
ini akan melakukan penambahan jumlah persediaan barang. Untuk itu dapat dilakukan
dengan perintah berikut.
24010314120059>\d|24010314120059>CREATE TRIGGER update_persediaan AFTER INSERT ON barang_masuk -> FOR EACH ROW BEGIN -> UPDATE persediaan SET jumlah=jumlah+new.jumlah WHERE id_barang=new.id_barang; -> END; -> |Query OK, 0 rows affected (0.77 sec)
Trigger ini bernama update_persediaan dan akan dilakukan setelah adanya pemasukan
pada tabel barang_masuk. Oleh sebab itu digunakan perintah AFTER. Tabel yang akan
berasosiasi dengan trigger ini adalah tabel barang_masuk. Dalam trigger ini akan
dilakukan update nilai jumlah dalam tabel persediaan dengan rumus:
Jumlah=Jumlah+new.jumlah.
Trigger ini akan diaktifkan ketika sebuah record dimodifikasi oleh karena itu
digunakan event update. Dengan syarat Id_barang yang baru sama dengan
Id_barang yang ada di tabel barang masuk.
12
Untuk melihat efek yang dihasilkan dari trigger ini, maka dilakukan insert data ke
dalam tabel barang masuk sebagai berikut.24010314120059>\d;24010314120059>INSERT INTO barang_masuk -> VALUES ("A001","DAIA 100gr", 8500, 9), -> ("A003","CIPTADENT 160gr", 7600, 9) -> ;Query OK, 2 rows affected (0.20 sec)Records: 2 Duplicates: 0 Warnings: 0Hasil insert data akan ditampilkan dengan peintah sebagai berikut:
Dari tabel diatas terlihat adanya perubahan jumlah barang. Pada tabel barang masuk
dimasukkan data:
Kode A001 jumlahnya 8
Kode A003 jumlahnya 9
Sehingga akan terjadi penambahan jumlah barang pula pada tabel persediaan sebagai
berikut:
Kode A001 jumlahnya 8+9 = 17
Kode A003 jumlahnya 9+9 = 18
b. Trigger kurangi_persediaan
Jika pasokan barang datang dari distributor maka data akan dimasukkan dalam tabel
barang masuk. Dengan adanya pertambahan data pada barang masuk akan
mengakibatkan perubahan (pengurangan) jumlah barang pada tabel persediaan. Trigger
ini akan melakukan pengurangan jumlah persediaan barang. Untuk itu dapat dilakukan
dengan perintah berikut.24010314120059>CREATE TRIGGER delete_persediaan AFTER INSERT ON barang_keluar -> FOR EACH ROW BEGIN -> UPDATE persediaan SET jumlah=jumlah-new.jumlah WHERE id_barang=new.id_barang; -> END; -> |Query OK, 0 rows affected (0.25 sec)
13
Trigger ini bernama kurangi_persediaan dan akan dilakukan setelah adanya pemasukan
data pada tabel barang_keluar. Oleh sebab itu digunakan perintah AFTER. Tabel yang
akan berasosiasi dengan trigger ini adalah tabel barang_keluar. Dalam trigger ini akan
dilakukan update nilai jumlah dalam tabel persediaan dengan rumus:
Jumlah=Jumlah – new.jumlah
Trigger ini akan diaktifkan ketika sebuah record dimodifikasi oleh karena itu
digunakan event update. Dengan syarat Id_barang yang baru sama dengan
Id_barang yang ada di tabel barang keluar.
Untuk melihat efek yang dihasilkan dari trigger ini, maka dilakukan insert data ke
dalam tabel barang masuk sebagai berikut.24010314120059>\d;24010314120059>INSERT INTO barang_keluar -> VALUES ("A002","RINSO 100gr", 8900, 3), -> ("A003","CIPTADENT 160gr", 7600, 4) -> ;Query OK, 2 rows affected (0.13 sec)Records: 2 Duplicates: 0 Warnings: 0Hasil insert data akan ditampilkan dengan peintah sebagai berikut:
Dari tabel diatas terlihat adanya perubahan jumlah barang. Pada tabel barang masuk
dimasukkan data:
Kode A002 jumlahnya 10
Kode A003 jumlahnya 18
Sehingga akan terjadi penambahan jumlah barang pula pada tabel persediaan sebagai
berikut:
Kode A002 jumlahnya 10 – 3 = 7
Kode A003 jumlahnya 18 – 4 = 14
14
BAB III
Penutup
3.1 Kesimpulan
Berdasarkan praktium yang telah dilaksanakan maka dapat diambil beberapa
kesimpulan sebagai berikut:
1. Stored procedure adalah prosedur (seperti subprogram dalam bahasa pemrograman)
yang disimpan di dalam database yang memudahkan pengguna dalam memanggil
sebuah perintah dengan query yang lebih sederhana dan mudah diingat karena
pengguna membuat sendiri.
2. Trigger merupakan sekumpulan perintah atau sintaks yang akan secara otomatis
dijalankan jika terjadi operasi tertentu dalam tabel. Trigger digunakan untuk memanggil
satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses
INSERT, UPDATE atau DELETE dari suatu tabel.
3. Trigger memudahkan pengguna database untuk mengupdate tabel-tabel yang saling
berpengaruh sehingga menyingkat waktu kerja dan hasilnya pun bisa lebih valid karena
tabel yang telah terintegrasi.
15