Welcome

Welcome, thanks to look my blog

Saturday, 19 April 2014

MySQL : Nomer Otomatis Dengan Function dan Trigger MySQL

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;
Setelah tabel jadi kita masuk menu Routines > Add routine seperti pada gambar dibawah ini….
autokodemysql-01
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…
autokodemysql-02
Penjelasan :
  1. Nama procedure/function yang kita buat, sangat penting soalnya nanti kalau kita akan memakai kita ketikan namanya.
  2. Type, memilih apakah kita akan membuat procedure/function.
  3. Parameter input (masukan) kedalam function yang kita buat, kita bisa menmabah berapapun sesuai yang kita butuhkan.
  4. Parameter output (kembalian) setelah fungsi dieksekusi.
  5. Isi koding procedure/function yang kita buat.
  6. 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…
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
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, 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.
autokodemysql-03
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..
autokodemysql-04
Selanjutnya saya coba pada aplikasi di delphi, dan bisa dilihat hasilnya, kode suplier tergenerate otomatis juga membuktikan function yang dibuat berjalan dengan benar..
autokodemysql-05
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/

1 comment:

  1. Mau nanya om, saya punya 2 table:
    table_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.

    ReplyDelete