21
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. 1

Laprak sbd

Embed Size (px)

Citation preview

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

DAFTAR PUSTAKA

Modul Praktikum SBD ke-5. Stored Procedure dan Trigger.

16