No Urut dengan Funtion dan Triger Mysql
Kali ini saya akan berbagi pengalaman bagaimana cara membuat nomor urut dengan funtion dan triger di mysql, saya menggunakan XAMPP , atau http://127.0.0.1/phpmyadmin.
Pertama
saya buat database dengan nama coba, kemudian saya buat tabel sederhana
dengan nama suplier dengan struktur tabel kurang lebih seperti ini…
CREATE TABLE IF NOT
EXISTS `suplier` (
`kodesup` varchar(8) NULL,
`namasup` varchar(20) NOT NULL,
PRIMARY KEY
(`kodesup`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
Setelah tabel jadi kita masuk menu Routines
> Add routine seperti pada gambar dibawah ini….
Selanjutnya kita akan dihadapakan
pada tampilan seperti dibawah, ini jendela untuk membuat Procedure/Function apa
sihbedanya? seinget saya waktu pelajaran dulu kalau function itu mempunyai
nilai kembalian, makanya ini saya pilih function karena nanti kita inputkan sebuah
parameter kemudian diolah dan memberikan nilai kembalian berupa kode…
Penjelasan :
- Nama procedure/function yang kita buat, sangat penting soalnya nanti kalau kita akan memakai kita ketikan namanya.
- Type, memilih apakah kita akan membuat procedure/function.
- Parameter input (masukan) kedalam function yang kita buat, kita bisa menmabah berapapun sesuai yang kita butukan.
- Parameter output (kembalian) setelah fungsi dieksekusi.
- Isi koding procedure/function yang kita buat.
- Definer seperti yang ada pada trigger yaitu akses user pengguna function nantinya. *catatan : agar fungsi/prosedur bisa dikases semua user di semua host (IP) kosongkan saja.
Oke setelah membuka dan menseting
seperti yang diperlukan, selanjutnya buat kode function seperti dibawah ini…
BEGIN
DECLARE kodebaru
CHAR(8);
DECLARE urut
INT;
SET urut =
IF(nomer IS NULL, 1, nomer + 1);
SET kodebaru
= CONCAT("SP", LPAD(urut, 6, 0));
RETURN kodebaru;
END
|
Penjelasan :
kita
deklarasikan variable kodebaru yang nanti akan di ambil sebagai nilai
hasil, serta urut untuk nilai masukan yang akan ditambah 1 dari nilai
terakhir yang dibaca oleh fungsi IF(nomer IS NULL, 1, nomer + 1) maksutnya
jika nilai diambil adalah NULL maka dia punya default 1, jika tidak NULL maka
nilai akan +1, CONCAT(“SP”, LPAD(urut, 6, 0)) akan
menggabungkan semua nilai string yang ada pada concat LPAD maksutnya memberi
nilai supaya menjadi 6 digit dengan angka nol selain nilai variable urut, jadi
jika nialai urut 1 maka lpad menjadikanya 6 digit 000001 tanpa merusak
variabel, jika nilai 15 maka akan menjadikan 6 digit 000015 tanpa merusak
variabel juga, sialhkan berkreasilah pokoknya internal function dalam mysql
bejibun pokoknya kalau mau googling dan sesuaikan kebutuhan.
Setelah
Function kelar kitta pasangkan trigger untuk memanggil fungsi tersebut,
sebenarnya dari aplikasi (Delphi) pun bisa kita panggil function dan isi
nililainya, tapi “WASTE” banget seperti itu mending bikin penomoran dari
aplikasi, dan kode triggernya seperti dibawah ini…
BEGIN
DECLARE s
VARCHAR(8);
DECLARE i
INTEGER;
SET i =
(SELECT SUBSTRING(kodesup,3,6) AS Nomer
FROM suplier
ORDER BY
Nomer DESC LIMIT
1);
SET s =
(SELECT KODEOTOMATIS(i));
IF(NEW.kodesup IS NULL
OR NEW.kodesup
= '')
THEN SET NEW.kodesup =s;
END IF;
END
|
Inget
ya trigger taruh di Before Insert jadi fungsi akan bekerja saat sebelum data
masuk, sedikit penjelasan SELECT SUBSTRING(kodesup,3,6) AS Nomer FROM
suplier ORDER BY Nomer DESC LIMIT 1 berarti substring kita mengambil nilai
dari char ke-3 sepanjang 6 char macem fungsi copy di delphi nih order by nomer
desc limit 1 adalah mendapatkan nilai dari record paling akhir jadi kita
dapatkan nilai terbesar.
Setelah
Function dan Trigger terpasang saatnya test kita insertkan data dari phpmyadmin
seperti tampak pada gambar diatas, kodesup kosongkan saja karena akan terisi
otomatis oleh Function yang kita buat tadi, maka hasil insert data akan
terlihat seperti gamabar dibawah, terlihat kodesup tergenerate otomatis..
Sekian dulu tutorial kali ini semoga bermanfaat.
Comments
Post a Comment