MySQL : Nomer Otomatis Dengan Function dan Trigger MySQL
Sebelumnya saya pernah tulis membuat nomer otomatis dari aplikasi,
bisa dibilang itu cara kuno tapi jagan salah semua berawal dari itu
sob, sebenarnya ga masah sih jika aplikasi yang kita buat berjalan
standalone jadi tidak ada traffic di database, kenapa sih harus buat
penomeran di database?? tentu mengurangi beban aplikasi kita sob juga
ngurangi koding di aplikasi yg jelas hehe…
Oke kali ini saya akan praktekan membuat
kode otomatis sederhana menggunakan routines function kemudian di
eksekusi dengan trigger dengan database MySQL untuk database lain
mungkin perlu perubahan kode tanyakan saja pada ahlinya haha, untuk
penjelasan trigger kurang lebih seperti ini sob silahkan dibaca disini. Saya rasa itu sudah menjelaskan dasar trigger dari MySQL…
Pertama saya buat database dengan nama coba, kemudian saya buat tabel sederhana dengan nama suplier dengan struktur tabel kurang lebih seperti ini…
1
2
3
4
5
| CREATE TABLE IF NOT EXISTS `suplier` ( `kodesup` varchar (8) NULL , `namasup` varchar (20) NOT NULL , PRIMARY KEY (`kodesup`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
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…
- 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 butuhkan.
- 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.
1
2
3
4
5
6
7
8
9
| 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 |
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, oke untuk
yang belum belajar trigger silahkan lirik. Dan kode triggernya seperti dibawah ini…
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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..
Selanjutnya saya coba pada aplikasi di
delphi, dan bisa dilihat hasilnya, kode suplier tergenerate otomatis
juga membuktikan function yang dibuat berjalan dengan benar..
Demikian trik function sederhana yang
dapat saya tulis semoga menjadi manfaat bagi yang membutuhkan, banyak
orang ber ilmu tapi tidak banyak yang mau berbagi, soo sisakan sedikit
komentar untuku sebagai dukungan untukku untuk lebih banyak menulis
lagi, semoga bermanfaat :)
Salam Delphier…
sumber : http://mboloz.wordpress.com/2013/12/07/nomer-otomatis-dengan-function-dan-trigger-mysql/
Mau nanya om, saya punya 2 table:
ReplyDeletetable_1:
-----------------------------------------------------------
id | perusahaan | pendapatan | pajak
----------------------------------------------------------
1 | CV. Makmur | 20.000.000 | .......
2 | PT. Asia Jaya | 20.000.000 |.......
3. | PT. DID | 40.000.000 |.......
keterangan:
id (int) (10)
perusahaan (varchar)(30)
pajak (int) (30)
pendapatan (int)(30)
Table_2:
---------------------------------------------------------------
id | code_perusahaan | parameter_pajak
---------------------------------------------------------------
1 | M20006 | 200.000
2 | AJ 20007 | 200.000
3. | DID20008 | 200.000
keterangan:
id (int)(10)
code_perusahaan (varchar)(20)
parameter_pajak (int)30)
pertanyaannya:
Saya mau melakukan pembagian antara kolom "penghasilan(table_1)" dibagi angka pada kolom "parameter_pajak(table_2)". terus hasilnya akan terinput otomatis ke kolom "pajak(table_1)".
Terus setiap melakukan input/update kolom "penghasilan (table_1)" atau melakukan peruabahan data di "parameter_pajak (table_2)" maka otomatis hasil nilai di kolom "pajak (table_1)" juga akan ikut berubah otomatis.
Mohon pencerahannya dong om.., makasih banyak sebelumnya.